{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_hub",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_loanToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_config",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_revokedNonce",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_categoryRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "tag",
          "type": "bytes32"
        }
      ],
      "name": "AddressMissingHubTag",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CallerNotLOANTokenHolder",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CallerNotVault",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "current",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiration",
          "type": "uint256"
        }
      ],
      "name": "Expired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IncompleteTransfer",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "current",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        }
      ],
      "name": "InterestAPROutOfBounds",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "current",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        }
      ],
      "name": "InvalidDuration",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidExtensionCaller",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        }
      ],
      "name": "InvalidExtensionDuration",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "allowed",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "current",
          "type": "address"
        }
      ],
      "name": "InvalidExtensionSigner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "current",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "expected",
          "type": "bytes32"
        }
      ],
      "name": "InvalidLenderSpecHash",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "category",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "InvalidMultiTokenAsset",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "current",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "expected",
          "type": "address"
        }
      ],
      "name": "InvalidPermitAsset",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "current",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "expected",
          "type": "address"
        }
      ],
      "name": "InvalidPermitOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "digest",
          "type": "bytes32"
        }
      ],
      "name": "InvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "InvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sourceOfFunds",
          "type": "address"
        }
      ],
      "name": "InvalidSourceOfFunds",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "name": "LoanDefaulted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LoanNotRunning",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LoanRepaid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LoanRunning",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NonExistingLoan",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonceSpace",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "NonceNotUsable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "currentBorrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "newBorrower",
          "type": "address"
        }
      ],
      "name": "RefinanceBorrowerMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RefinanceCollateralMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RefinanceCreditMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "categoryValue",
          "type": "uint8"
        }
      ],
      "name": "UnsupportedCategory",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnsupportedTransferFunction",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "extensionHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "proposer",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "compensationAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "compensationAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint40",
              "name": "duration",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            },
            {
              "internalType": "address",
              "name": "proposer",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonceSpace",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct PWNSimpleLoan.ExtensionProposal",
          "name": "proposal",
          "type": "tuple"
        }
      ],
      "name": "ExtensionProposalMade",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "defaulted",
          "type": "bool"
        }
      ],
      "name": "LOANClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "proposalHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "proposalContract",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "lender",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "borrower",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "duration",
              "type": "uint32"
            },
            {
              "components": [
                {
                  "internalType": "enum MultiToken.Category",
                  "name": "category",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "assetAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct MultiToken.Asset",
              "name": "collateral",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "enum MultiToken.Category",
                  "name": "category",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "assetAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct MultiToken.Asset",
              "name": "credit",
              "type": "tuple"
            },
            {
              "internalType": "uint256",
              "name": "fixedInterestAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint40",
              "name": "accruingInterestAPR",
              "type": "uint40"
            },
            {
              "internalType": "bytes32",
              "name": "lenderSpecHash",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "borrowerSpecHash",
              "type": "bytes32"
            }
          ],
          "indexed": false,
          "internalType": "struct PWNSimpleLoan.Terms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "sourceOfFunds",
              "type": "address"
            }
          ],
          "indexed": false,
          "internalType": "struct PWNSimpleLoan.LenderSpec",
          "name": "lenderSpec",
          "type": "tuple"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extra",
          "type": "bytes"
        }
      ],
      "name": "LOANCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint40",
          "name": "originalDefaultTimestamp",
          "type": "uint40"
        },
        {
          "indexed": false,
          "internalType": "uint40",
          "name": "extendedDefaultTimestamp",
          "type": "uint40"
        }
      ],
      "name": "LOANExtended",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        }
      ],
      "name": "LOANPaidBack",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "refinancedLoanId",
          "type": "uint256"
        }
      ],
      "name": "LOANRefinanced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum MultiToken.Category",
              "name": "category",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "assetAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct MultiToken.Asset",
          "name": "asset",
          "type": "tuple"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "poolAdapter",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "PoolSupply",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum MultiToken.Category",
              "name": "category",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "assetAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct MultiToken.Asset",
          "name": "asset",
          "type": "tuple"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "poolAdapter",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "PoolWithdraw",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum MultiToken.Category",
              "name": "category",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "assetAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct MultiToken.Asset",
          "name": "asset",
          "type": "tuple"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "origin",
          "type": "address"
        }
      ],
      "name": "VaultPull",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum MultiToken.Category",
              "name": "category",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "assetAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct MultiToken.Asset",
          "name": "asset",
          "type": "tuple"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "beneficiary",
          "type": "address"
        }
      ],
      "name": "VaultPush",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum MultiToken.Category",
              "name": "category",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "assetAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct MultiToken.Asset",
          "name": "asset",
          "type": "tuple"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "origin",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "beneficiary",
          "type": "address"
        }
      ],
      "name": "VaultPushFrom",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "APR_INTEREST_DENOMINATOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "APR_TO_DAILY_INTEREST_DENOMINATOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "APR_TO_DAILY_INTEREST_NUMERATOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DAILY_INTEREST_DENOMINATOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "EXTENSION_PROPOSAL_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_ACCRUING_INTEREST_APR",
      "outputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_EXTENSION_DURATION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIN_EXTENSION_DURATION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIN_LOAN_DURATION",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "categoryRegistry",
      "outputs": [
        {
          "internalType": "contract IMultiTokenCategoryRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        }
      ],
      "name": "claimLOAN",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "config",
      "outputs": [
        {
          "internalType": "contract PWNConfig",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "proposalContract",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "proposalData",
              "type": "bytes"
            },
            {
              "internalType": "bytes32[]",
              "name": "proposalInclusionProof",
              "type": "bytes32[]"
            },
            {
              "internalType": "bytes",
              "name": "signature",
              "type": "bytes"
            }
          ],
          "internalType": "struct PWNSimpleLoan.ProposalSpec",
          "name": "proposalSpec",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "sourceOfFunds",
              "type": "address"
            }
          ],
          "internalType": "struct PWNSimpleLoan.LenderSpec",
          "name": "lenderSpec",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "refinancingLoanId",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "revokeNonce",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "permitData",
              "type": "bytes"
            }
          ],
          "internalType": "struct PWNSimpleLoan.CallerSpec",
          "name": "callerSpec",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "extra",
          "type": "bytes"
        }
      ],
      "name": "createLOAN",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "compensationAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "compensationAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint40",
              "name": "duration",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            },
            {
              "internalType": "address",
              "name": "proposer",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonceSpace",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            }
          ],
          "internalType": "struct PWNSimpleLoan.ExtensionProposal",
          "name": "extension",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "permitData",
          "type": "bytes"
        }
      ],
      "name": "extendLOAN",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "extensionProposalsMade",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "compensationAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "compensationAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint40",
              "name": "duration",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            },
            {
              "internalType": "address",
              "name": "proposer",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonceSpace",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            }
          ],
          "internalType": "struct PWNSimpleLoan.ExtensionProposal",
          "name": "extension",
          "type": "tuple"
        }
      ],
      "name": "getExtensionHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        }
      ],
      "name": "getLOAN",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "status",
          "type": "uint8"
        },
        {
          "internalType": "uint40",
          "name": "startTimestamp",
          "type": "uint40"
        },
        {
          "internalType": "uint40",
          "name": "defaultTimestamp",
          "type": "uint40"
        },
        {
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "originalLender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "loanOwner",
          "type": "address"
        },
        {
          "internalType": "uint40",
          "name": "accruingInterestDailyRate",
          "type": "uint40"
        },
        {
          "internalType": "uint256",
          "name": "fixedInterestAmount",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "enum MultiToken.Category",
              "name": "category",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "assetAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "internalType": "struct MultiToken.Asset",
          "name": "credit",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum MultiToken.Category",
              "name": "category",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "assetAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "internalType": "struct MultiToken.Asset",
          "name": "collateral",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "originalSourceOfFunds",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "repaymentAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "sourceOfFunds",
              "type": "address"
            }
          ],
          "internalType": "struct PWNSimpleLoan.LenderSpec",
          "name": "lenderSpec",
          "type": "tuple"
        }
      ],
      "name": "getLenderSpecHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getStateFingerprint",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "hub",
      "outputs": [
        {
          "internalType": "contract PWNHub",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum MultiToken.Category",
              "name": "category",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "assetAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "internalType": "struct MultiToken.Asset",
          "name": "asset",
          "type": "tuple"
        }
      ],
      "name": "isValidAsset",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "loanMetadataUri",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        }
      ],
      "name": "loanRepaymentAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "loanToken",
      "outputs": [
        {
          "internalType": "contract PWNLOAN",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "compensationAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "compensationAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint40",
              "name": "duration",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            },
            {
              "internalType": "address",
              "name": "proposer",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonceSpace",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            }
          ],
          "internalType": "struct PWNSimpleLoan.ExtensionProposal",
          "name": "extension",
          "type": "tuple"
        }
      ],
      "name": "makeExtensionProposal",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "permitData",
          "type": "bytes"
        }
      ],
      "name": "repayLOAN",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "revokedNonce",
      "outputs": [
        {
          "internalType": "contract PWNRevokedNonce",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "loanId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "creditAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "loanOwner",
          "type": "address"
        }
      ],
      "name": "tryClaimRepaidLOAN",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x61018060405260036101409081526218971960e91b610160527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f907f3af43dc47dd092dc79d11f941571a702d1419a15bb1e9b52d0e0e91e22f07352906200006a906101a06200011c565b60408051601f1981840301815282825280516020918201209083019490945281019190915260608101919091524660808201523060a082015260c00160408051601f198184030181529190528051602090910120608052348015620000ce57600080fd5b506040516200531a3803806200531a833981016040819052620000f1916200016a565b6001600160a01b0394851660a05292841660c05290831660e0528216610100521661012052620001da565b6000825160005b818110156200013f576020818601810151858301520162000123565b506000920191825250919050565b80516001600160a01b03811681146200016557600080fd5b919050565b600080600080600060a086880312156200018357600080fd5b6200018e866200014d565b94506200019e602087016200014d565b9350620001ae604087016200014d565b9250620001be606087016200014d565b9150620001ce608087016200014d565b90509295509295909350565b60805160a05160c05160e0516101005161012051615064620002b6600039600081816103c701526114150152600081816104b60152818161075901528181610a99015261184d01526000818161045401528181610e06015281816115df01528181612a0301528181612ab601528181612c0501528181612db9015261357301526000818161024d0152818161087001528181610cca015281816110ad01528181611331015281816123d40152818161272b0152612b7b01526000818161033b01526116fd015260008181610314015261143d01526150646000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063640d16ed1161011a578063a11a581c116100ad578063c81980801161007c578063c819808014610522578063da8c3b7014610535578063f23a6e6114610548578063f51123151461055b578063ffa1ad741461056e57600080fd5b8063a11a581c146104d8578063a2d00469146104e1578063bc197c81146104ed578063c399e17d1461050057600080fd5b80637f24133f116100e95780637f24133f1461047657806389d99a051461048057806394aedc2f1461049e5780639788ad55146104b157600080fd5b8063640d16ed146104065780637122192c1461042957806374baf6ef1461043c57806379502c551461044f57600080fd5b80632c8ebec81161019d5780633e6df5121161016c5780633e6df512146103705780634acacdda1461039b57806358099d96146103c257806358b5d263146103e9578063632c6a23146103f357600080fd5b80632c8ebec8146103055780633644e5151461030f578063365a86fc14610336578063376af4d11461035d57600080fd5b8063111d8a15116101d9578063111d8a151461029a578063150b7a02146102af57806325f2c190146102db5780632c3eae8a146102f257600080fd5b806301ffc9a71461020b578063028232ea1461023357806306d37817146102485780630ee1ba1714610287575b600080fd5b61021e6102193660046141ef565b610590565b60405190151581526020015b60405180910390f35b610246610241366004614273565b6105e2565b005b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161022a565b6102466102953660046142f7565b610c9b565b6102a2610dee565b60405161022a9190614360565b6102c26102bd366004614393565b610e82565b6040516001600160e01b0319909116815260200161022a565b6102e461011281565b60405190815260200161022a565b6102e46103003660046142f7565b610ebf565b6102e46276a70081565b6102e47f000000000000000000000000000000000000000000000000000000000000000081565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b61024661036b3660046143f4565b610ef1565b61038361037e3660046142f7565b610fd1565b60405161022a9c9b9a99989796959493929190614471565b6102e47f9ff198f1043fd251b64c2f21c2278160819a77a1da50cf8284dc53af040fa71781565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b6102e4620186a081565b610246610401366004614500565b6111ec565b61021e6104143660046142f7565b60016020526000908152604090205460ff1681565b61021e610437366004614597565b61140d565b6102e461044a3660046143f4565b611439565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b6102e46201518081565b61048961025881565b60405163ffffffff909116815260200161022a565b6102466104ac36600461460b565b611506565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b6102e461271081565b6102e46402540be40081565b6102c26104fb366004614688565b6116c3565b61050c64174876e80081565b60405164ffffffffff909116815260200161022a565b6102e4610530366004614758565b6116de565b6102e4610543366004614786565b6116f1565b6102c2610556366004614808565b611ba4565b6102e46105693660046142f7565b611be2565b6102a26040518060400160405280600381526020016218971960e91b81525081565b60006001600160e01b031982166301ffc9a760e01b14806105c157506001600160e01b03198216630a85bd0160e11b145b806105dc57506001600160e01b03198216630271189760e51b145b92915050565b843560009081526020819052604081208054909160ff909116900361061a576040516335cee39560e01b815260040160405180910390fd5b805460ff1660030361063f57604051631062e18f60e01b815260040160405180910390fd5b600061064a87611439565b60008181526001602052604090205490915060ff166106f8576106b361067660c0890160a08a01614883565b8288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7592505050565b6106f8576106c760c0880160a08901614883565b6040516301d2d55760e31b81526001600160a01b039091166004820152602481018290526044015b60405180910390fd5b61070860a08801608089016148b3565b64ffffffffff16421061074f574261072660a0890160808a016148b3565b60405163aa2fd92560e01b8152600481019290925264ffffffffff1660248201526044016106ef565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663f291a62c61078e60c08a0160a08b01614883565b60405160e083811b6001600160e01b03191682526001600160a01b0392909216600482015260c08b01356024820152908a01356044820152606401602060405180830381865afa1580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080a91906148de565b6108575761081e60c0880160a08901614883565b604051632108c30560e11b81526001600160a01b03909116600482015260c0880135602482015260e088013560448201526064016106ef565b6040516331a9108f60e11b8152873560048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156108bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e39190614906565b90506001600160a01b038116330361096f5760028301546001600160a01b031661091360c08a0160a08b01614883565b6001600160a01b03161461096a5760028301546001600160a01b031661093f60c08a0160a08b01614883565b604051627c5e8760e31b81526001600160a01b039283166004820152911660248201526044016106ef565b6109d5565b60028301546001600160a01b031633036109bc576001600160a01b03811661099d60c08a0160a08b01614883565b6001600160a01b03161461096a578061093f60c08a0160a08b01614883565b604051639d29f3a960e01b815260040160405180910390fd5b620151806109e960808a0160608b016148b3565b64ffffffffff161015610a3257610a066080890160608a016148b3565b604051631a16ab3160e11b815264ffffffffff90911660048201526201518060248201526044016106ef565b6276a700610a4660808a0160608b016148b3565b64ffffffffff161115610a8f57610a636080890160608a016148b3565b604051631a16ab3160e11b815264ffffffffff90911660048201526276a70060248201526044016106ef565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663f79924a9610ace60c08b0160a08c01614883565b60405160e083811b6001600160e01b03191682526001600160a01b0392909216600482015260c08c01356024820152908b01356044820152606401600060405180830381600087803b158015610b2357600080fd5b505af1158015610b37573d6000803e3d6000fd5b505050506001830154600160c81b900464ffffffffff16610b5e60808a0160608b016148b3565b610b689082614939565b60018501805464ffffffffff60c81b1916600160c81b64ffffffffff938416810291909117918290556040805185851681529190920490921660208301528a35917f16e70f82a9a68fdbf6cc67068dcfadcaf1e0c61409aa3a24122767789ccc20d5910160405180910390a26000610be660408b0160208c01614883565b6001600160a01b031614158015610c01575060008960400135115b15610c90576000610c2e60408b01803590610c1f9060208e01614883565b6001600160a01b031690611e1b565b9050610c3981611e53565b8515610c74576000610c4d8789018961496d565b9050610c6933610c6360408e0160208f01614883565b83611ec1565b610c7281611f71565b505b6002850154610c8e9082906001600160a01b031685612028565b505b505050505050505050565b6000818152602081905260409081902090516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190614906565b6001600160a01b031614610d5c57604051632a0a3d8160e11b815260040160405180910390fd5b805460ff16600003610d81576040516335cee39560e01b815260040160405180910390fd5b805460ff16600303610d9d57610d998233600061209f565b5050565b805460ff166002148015610dc45750600181015442600160c81b90910464ffffffffff1611155b15610dd557610d998233600161209f565b6040516311d01f2b60e31b815260040160405180910390fd5b604051630233557560e41b81523060048201526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632335575090602401600060405180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e7d9190810190614a0a565b905090565b60006001600160a01b0386163014610ead576040516382a1dea160e01b815260040160405180910390fd5b50630a85bd0160e11b95945050505050565b6000818152602081905260408120805460ff168203610ee15750600092915050565b610eea83612184565b9392505050565b610f0160c0820160a08301614883565b6001600160a01b0316336001600160a01b031614610f5357610f2960c0820160a08301614883565b604051627c5e8760e31b81526001600160a01b0390911660048201523360248201526044016106ef565b6000610f5e82611439565b6000818152600160208190526040909120805460ff191690911790559050610f8c60c0830160a08401614883565b6001600160a01b0316817f3404b1a797c8c84bf93d13290f9f6e7464634602778a1ffa1fc7d8708668022e84604051610fc59190614aab565b60405180910390a35050565b600080600080600080600080610fe56141bd565b610fed6141bd565b60008b815260208190526040812081906110068e6121aa565b9c508060010160149054906101000a900464ffffffffff169b508060010160199054906101000a900464ffffffffff169a508060020160009054906101000a90046001600160a01b031699508060030160009054906101000a90046001600160a01b031698508060000160009054906101000a900460ff1660ff1660000361108f576000611118565b6040516331a9108f60e11b8152600481018f90526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190614906565b6003820154600483015460058401548454939b50600160a01b90920464ffffffffff16995097506111579161010090046001600160a01b031690611e1b565b60408051608081019091526006830180549297509091829060ff16600381111561118357611183614411565b600381111561119457611194614411565b815281546001600160a01b03610100909104811660208301526001808401546040840152600290930154606090920191909152908301549195501692506111da8e610ebf565b91505091939597999b5091939597999b565b60008381526020819052604090208054600182015461121c9160ff1690600160c81b900464ffffffffff166121f6565b6112258461226e565b81156112635760006112398385018561496d565b825490915061125890339061010090046001600160a01b031683611ec1565b61126181611f71565b505b600061126e85612184565b82549091506112959061128f9061010090046001600160a01b031683611e1b565b336122d7565b604080516080810190915260068301805461130f929190829060ff1660038111156112c2576112c2614411565b60038111156112d3576112d3614411565b815281546001600160a01b0361010090910481166020830152600183015460408301526002928301546060909201919091529085015416612343565b6040516331a9108f60e11b81526004810186905230906394aedc2f90879084907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190614906565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b03166044820152606401600060405180830381600087803b1580156113f357600080fd5b505af1925050508015611404575060015b505b5050505050565b60006105dc827f00000000000000000000000000000000000000000000000000000000000000006123a2565b60007f00000000000000000000000000000000000000000000000000000000000000007f9ff198f1043fd251b64c2f21c2278160819a77a1da50cf8284dc53af040fa7178360405160200161148e9190614aab565b60408051601f19818403018152908290526114ac9291602001614b44565b604051602081830303815290604052805190602001206040516020016114e992919061190160f01b81526002810192909252602282015260420190565b604051602081830303815290604052805190602001209050919050565b3330146115265760405163edd7338f60e01b815260040160405180910390fd5b6000838152602081905260409020805460ff166003146115465750505050565b60038101546001600160a01b038381169116146115635750505050565b600181015481546001600160a01b039182169160009161158a916101009091041686611e1b565b9050611595866123be565b836001600160a01b0316826001600160a01b0316036115bd576115b88185612343565b61168e565b60405163b209123160e01b81526001600160a01b0383811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b209123190602401602060405180830381865afa158015611628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164c9190614906565b90506001600160a01b03811661168057604051632f9526c360e11b81526001600160a01b03841660048201526024016106ef565b61168c828285886124b2565b505b60405160009087907f01c41914692eda9e423c83b28344603636e57a2803060f6778fea9ba50e71b73908390a3505050505050565b60006040516382a1dea160e01b815260040160405180910390fd5b6000816040516020016114e99190614b84565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d019577a61172f6020890189614883565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201527fc0ba7a416221f318a8087fd62f9ff407488b7f5501e79caf9b0666c2df326b9c6024820152604401602060405180830381865afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd91906148de565b611819576117ce6020870187614883565b604051630b92eb2560e11b81526001600160a01b0390911660048201527fc0ba7a416221f318a8087fd62f9ff407488b7f5501e79caf9b0666c2df326b9c60248201526044016106ef565b6118296040850160208601614ba4565b156118b25760408051630a69412f60e21b81523360048201529085013560248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906329a504bc90604401600060405180830381600087803b15801561189957600080fd5b505af11580156118ad573d6000803e3d6000fd5b505050505b8335156118ed5783356000908152602081905260409020805460018201546118eb9160ff1690600160c81b900464ffffffffff166121f6565b505b6000806118fd6020890189614883565b6001600160a01b03166301e8327233883561191b60208d018d614bc1565b61192860408f018f614c07565b8f80606001906119389190614bc1565b6040518963ffffffff1660e01b815260040161195b989796959493929190614c79565b610200604051808303816000875af115801561197b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199f9190614d8d565b805191935091506001600160a01b031633148015906119ca57506119c2876116de565b8160e0015114155b156119ff578060e001516119dd886116de565b604051633188f56d60e11b8152600481019290925260248201526044016106ef565b61025863ffffffff16816040015163ffffffff161015611a4857604080820151905163387a058b60e01b815263ffffffff909116600482015261025860248201526044016106ef565b64174876e80064ffffffffff168160c0015164ffffffffff161115611a9a5760c0810151604051630fb8adc560e41b815264ffffffffff909116600482015264174876e80060248201526044016106ef565b8535600003611ac257611ab08160800151611e53565b611abd8160600151611e53565b611acd565b611acd8635826125b2565b611ae782611ade60208b018b614883565b838a8989612707565b92506000611af86060880188614bc1565b90501115611b3c576000611b0f6060880188614bc1565b810190611b1c919061496d565b9050611b313383608001516020015183611ec1565b611b3a81611f71565b505b8535600003611b5457611b4f81886129b4565b611b99565b611b5e863561226e565b611b6a86358289612b54565b60405183908735907fdcebfa2e6797f7ce57def09d53b735c278982e3b8c71c9fa63f167148c4cab3790600090a35b505095945050505050565b60006001600160a01b0387163014611bcf576040516382a1dea160e01b815260040160405180910390fd5b5063f23a6e6160e01b9695505050505050565b6000818152602081905260408120805460ff168203611c045750600092915050565b611c0d836121aa565b6001820154600483015460038401546040805160ff95909516602086015264ffffffffff600160c81b9094048416908501526060840191909152600160a01b900416608082015260a00160405160208183030381529060405280519060200120915050919050565b60006001600160a01b0384163b15611d7057600080856001600160a01b0316631626ba7e60e01b8686604051602401611caf929190614e53565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611ced9190614e6c565b600060405180830381855afa9150503d8060008114611d28576040519150601f19603f3d011682016040523d82523d6000602084013e611d2d565b606091505b5091509150818015611d40575080516020145b8015611d6757508051630b135d3f60e11b90611d659083016020908101908401614e88565b145b92505050610eea565b60008060008451604103611d985750505060208201516040830151606084015160001a611def565b8451604003611dd157602085015160408601519093506001600160ff1b0381169250611dc960ff82901c601b614ea1565b915050611def565b845160405163058676ad60e31b81526004016106ef91815260200190565b611dfb86828585612efe565b6001600160a01b0316876001600160a01b03161493505050509392505050565b611e236141bd565b506040805160808101825260008082526001600160a01b0394909416602082015290810192909252606082015290565b611e5c8161140d565b611ebe5780516003811115611e7357611e73614411565b60208201516040808401516060850151915163032163e160e11b815260ff90941660048501526001600160a01b039092166024840152604483019190915260648201526084016106ef565b50565b80516001600160a01b031615611f6c57826001600160a01b031681602001516001600160a01b031614611f20576020810151604051637c14fe8960e01b81526001600160a01b03918216600482015290841660248201526044016106ef565b816001600160a01b031681600001516001600160a01b031614611f6c5780516040516329be2d5d60e21b81526001600160a01b03918216600482015290831660248201526044016106ef565b505050565b80516001600160a01b031615611ebe57805160208201516040808401516060850151608086015160a087015160c0880151945163d505accf60e01b81526001600160a01b0396871660048201523060248201526044810194909452606484019290925260ff16608483015260a482015260c481019190915291169063d505accf9060e401600060405180830381600087803b15801561200f57600080fd5b505af1925050508015612020575060015b15611ebe5750565b60006120348483612f28565b9050612041848484613172565b61204e848284600161317f565b816001600160a01b0316836001600160a01b03167f0272ef83f5953daad3d7708e6b4442e126f1e049e62a01c1fc53683f3277199c866040516120919190614eb4565b60405180910390a350505050565b600083815260208190526040812090826120da576120d56120bf86612184565b835461010090046001600160a01b031690611e1b565b612140565b6040805160808101909152600683018054829060ff16600381111561210157612101614411565b600381111561211257612112614411565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546060909101525b905061214b856123be565b6040518315159086907f01c41914692eda9e423c83b28344603636e57a2803060f6778fea9ba50e71b7390600090a36114068185612343565b600081815260208190526040812061219b816131dc565b8160050154610eea9190614ea1565b6000818152602081905260408120805460ff1660021480156121df5750600181015442600160c81b90910464ffffffffff1611155b6121ed57805460ff16610eea565b60049392505050565b8160ff1660000361221a576040516335cee39560e01b815260040160405180910390fd5b8160ff1660021461223e576040516331fe4d5d60e01b815260040160405180910390fd5b428164ffffffffff1611610d9957604051631e3cd61560e01b815264ffffffffff821660048201526024016106ef565b6000818152602081905260409020805460ff19166003178155612290816131dc565b600482015560038101805464ffffffffff60a01b1916905560405182907ff1e5b832ef53e7d611651983b38ff941f4d2049e9c8962c623c2664bca312bc090600090a25050565b60006122e38330612f28565b90506122f083833061327a565b6122fd838230600161317f565b816001600160a01b03167f019fcaae912e42069954835069f1c8184411022f86cf749694625f2a2313b6ab846040516123369190614eb4565b60405180910390a2505050565b600061234f8383612f28565b905061235c833084613172565b612369838284600161317f565b816001600160a01b03167fc2b8da69776ffa72ca2d7c4a31390d57bd4871cef8066bbe7f1e5bf220a310f1846040516123369190614eb4565b60006123ae8383613287565b8015610eea5750610eea83613335565b604051630852cd8d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b50505060009182525060208190526040812080546001600160a81b031990811682556001820180546001600160f01b03191690556002820180546001600160a01b03191690556003820180546001600160c81b0319169055600482018390556005820183905560068201805490911690556007810182905560080155565b60006124be8530612f28565b90506124cb85308661327a565b6020850151606086015160405163107c8ed760e01b81526001600160a01b0386811660048301528581166024830152928316604482015260648101919091529085169063107c8ed790608401600060405180830381600087803b15801561253157600080fd5b505af1158015612545573d6000803e3d6000fd5b50505050612556858230600061317f565b816001600160a01b0316836001600160a01b0316856001600160a01b03167fb58f4e60b4600784c073e07e7bb67825fe64b4592b5c7ce254599a9b8dcc4d82886040516125a39190614eb4565b60405180910390a45050505050565b600082815260208181526040909120608083015190910151815461010090046001600160a01b0390811691161415806125f15750608082015160600151155b1561260f57604051635f860c6160e11b815260040160405180910390fd5b606082015151600381111561262657612626614411565b600682015460ff16600381111561263f5761263f614411565b14158061266a5750606082015160200151600682015461010090046001600160a01b03908116911614155b806126815750606082015160400151600782015414155b8061269757506060808301510151600882015414155b156126b55760405163175bb1b760e21b815260040160405180910390fd5b602082015160028201546001600160a01b03908116911614611f6c576002810154602083015160405163d4b919f760e01b81526001600160a01b039283166004820152911660248201526044016106ef565b83516040516335313c2160e11b81526001600160a01b0391821660048201526000917f00000000000000000000000000000000000000000000000000000000000000001690636a627842906024016020604051808303816000875af1158015612774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127989190614e88565b600081815260208181526040909120805460808901518301516001600160a01b0316610100026001600160a81b03199091161760021781559192506127df90860186614883565b60018201805464ffffffffff42908116600160a01b026001600160c81b03199092166001600160a01b039490941693909317179055604087015161282b9163ffffffff90911690614939565b60018201805464ffffffffff928316600160c81b0264ffffffffff60c81b1990911617905560208701516002830180546001600160a01b039283166001600160a01b031991821617909155885160038501805491909316911617905560c08701516128a6916128a19116610112620186a0613413565b6134fd565b6003808301805464ffffffffff93909316600160a01b0264ffffffffff60a01b199093169290921790915560a0870151600483015560808701516060908101516005840155870151805160068401805492939092839160ff1990911690600190849081111561291757612917614411565b021790555060208201518160000160016101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816001015560608201518160020155905050866001600160a01b031688837ffaeed8c21a13a10e299d00abac61501436fa5faf27ddd94540a3815fb98ce737898989896040516129a19493929190614ec2565b60405180910390a4509695505050505050565b6129c6826060015183602001516122d7565b81516001600160a01b03166129de6020830183614883565b6001600160a01b0316146129fb576129fb82608001518383613567565b600080612a917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a839190614f83565b856080015160600151613678565b608086015191935091508215612b3b5782816060018181525050612b3b8186600001517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c415b95c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b369190614906565b612028565b6060810182905284516020860151611406918391612028565b60008381526020819052604080822090516331a9108f60e11b8152600481018690529091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bee9190614906565b90506000612bfb86612184565b9050600080612c937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c859190614f83565b886080015160600151613678565b915091506000612ca384836136b9565b90506000848311612cb5576000612cbf565b612cbf8584614fa7565b90506000808211612cd957612cd48487614fa7565b612cdc565b60005b90506000876001600160a01b03168b600001516001600160a01b0316141580612d3c575060038901546001600160a01b038981169116148015612d3c5750612d2760208b018b614883565b60018a01546001600160a01b03908116911614155b60808c01518c51919250906001600160a01b0316612d5d60208d018d614883565b6001600160a01b031614612d9e578382612d78576000612d7a565b855b612d849089614ea1565b612d8e9190614ea1565b6060820152612d9e818d8d613567565b8615612e155786816060018181525050612e15818d600001517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c415b95c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b12573d6000803e3d6000fd5b8115612e2f57606081018590528b51612e2f9082906122d7565b8315612e5357606081018490528b5160208d0151612e4e918391612028565b612e70565b8215612e70576060810183905260208c0151612e709082906122d7565b306394aedc2f8e8585612e84576000612e86565b885b612e909190614ea1565b6040516001600160e01b031960e085901b168152600481019290925260248201526001600160a01b038c166044820152606401600060405180830381600087803b158015612edd57600080fd5b505af1925050508015612eee575060015b5050505050505050505050505050565b6000806000612f0f878787876136cf565b91509150612f1c81613793565b5090505b949350505050565b60008083516003811115612f3e57612f3e614411565b03612fbb5760208301516040516370a0823160e01b81526001600160a01b038481166004830152909116906370a08231906024015b602060405180830381865afa158015612f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb49190614e88565b90506105dc565b600183516003811115612fd057612fd0614411565b0361307857816001600160a01b031683602001516001600160a01b0316636352211e85604001516040518263ffffffff1660e01b815260040161301591815260200190565b602060405180830381865afa158015613032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130569190614906565b6001600160a01b03161461306b57600061306e565b60015b60ff1690506105dc565b60028351600381111561308d5761308d614411565b036130d05760208301516040808501519051627eeac760e11b81526001600160a01b038581166004830152602482019290925291169062fdd58e90604401612f73565b6003835160038111156130e5576130e5614411565b0361312a57816001600160a01b031683602001516001600160a01b0316636352211e85604001516040518263ffffffff1660e01b815260040161301591815260200190565b60405162461bcd60e51b815260206004820181905260248201527f4d756c7469546f6b656e3a20556e737570706f727465642063617465676f727960448201526064016106ef565b611f6c83838360016138dd565b60008161319e5761318f85613b96565b6131999085614fa7565b6131b1565b6131a785613b96565b6131b19085614ea1565b90506131bd8584612f28565b8114611406576040516345ffc53d60e11b815260040160405180910390fd5b6003810154600090600160a01b900464ffffffffff16810361320057506004015490565b6001820154600090620151809061322590600160a01b900464ffffffffff1642614fa7565b61322f9190614fd0565b60058401546003850154919250600091613268919061325d908590600160a01b900464ffffffffff16614ff2565b6402540be400613413565b9050808460040154612f209190614ea1565b611f6c83838360006138dd565b6020820151604051638481ab0760e01b81526001600160a01b039182166004820152600091829190841690638481ab0790602401602060405180830381865afa1580156132d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fc9190615011565b905060ff8082161461332c57835160ff821690600381111561332057613320614411565b60ff16149150506105dc565b612f2084613bf1565b6000808251600381111561334b5761334b614411565b036133675760408201511561336257506000919050565b61340b565b60018251600381111561337c5761337c614411565b036133935760608201511561336257506000919050565b6002825160038111156133a8576133a8614411565b1461340b576003825160038111156133c2576133c2614411565b036133d95760608201511561336257506000919050565b815160038111156133ec576133ec614411565b604051635928f9a360e11b815260ff90911660048201526024016106ef565b506001919050565b600080806000198587098587029250828110838203039150508060000361344d5783828161344357613443614fba565b0492505050610eea565b8084116134945760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016106ef565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600064ffffffffff8211156135635760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526530206269747360d01b60648201526084016106ef565b5090565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663b20912316135a56020850185614883565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156135e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360d9190614906565b90506001600160a01b03811661364f5761362a6020830183614883565b604051632f9526c360e11b81526001600160a01b0390911660048201526024016106ef565b60608401511561367257613672848261366b6020860186614883565b8651613d87565b50505050565b6000808361ffff16600003613692575060009050816136b2565b6136a3838561ffff16612710613413565b91506136af8284614fa7565b90505b9250929050565b60008183106136c85781610eea565b5090919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613706575060009050600361378a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561375a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166137835760006001925092505061378a565b9150600090505b94509492505050565b60008160048111156137a7576137a7614411565b036137af5750565b60018160048111156137c3576137c3614411565b036138105760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106ef565b600281600481111561382457613824614411565b036138715760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106ef565b600381600481111561388557613885614411565b03611ebe5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106ef565b6000845160038111156138f2576138f2614411565b0361395a57306001600160a01b038416036139325761392d82856060015186602001516001600160a01b0316613e6d9092919063ffffffff16565b613672565b61392d8383866060015187602001516001600160a01b0316613ed0909392919063ffffffff16565b60018451600381111561396f5761396f614411565b03613a4a57806139f457602084015160408086015190516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201929092529116906323b872dd906064015b600060405180830381600087803b1580156139d757600080fd5b505af11580156139eb573d6000803e3d6000fd5b50505050613672565b60208401516040808601519051635c46a7ef60e11b81526001600160a01b03868116600483015285811660248301526044820192909252608060648201526000608482015291169063b88d4fde9060a4016139bd565b600284516003811115613a5f57613a5f614411565b03613ae45783602001516001600160a01b031663f242432a848487604001518860600151600014613a94578860600151613a97565b60015b6040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529390921660248401526044830152606482015260a06084820152600060a482015260c4016139bd565b600384516003811115613af957613af9614411565b0361312a57306001600160a01b03841603613b4e576020840151604080860151905163a9059cbb60e01b81526001600160a01b038581166004830152602482019290925291169063a9059cbb906044016139bd565b602084015160408086015190516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201929092529116906323b872dd906064016139bd565b60008082516003811115613bac57613bac614411565b03613bb957506060015190565b600282516003811115613bce57613bce614411565b148015613bdf575060008260600151115b1561340b57506060015190565b919050565b60008082516003811115613c0757613c07614411565b03613cdc57613c2282602001516001600160a01b0316613f08565b15613cc8576020820151613c46906001600160a01b03166336372b0760e01b613f30565b15613c5357506001919050565b6020820151613c72906001600160a01b03166380ac58cd60e01b613f30565b158015613c9b57506020820151613c99906001600160a01b0316636cdb3d1360e11b613f30565b155b80156105dc57506020820151613cc1906001600160a01b0316639a20483d60e01b613f30565b1592915050565b50602001516001600160a01b03163b151590565b600182516003811115613cf157613cf1614411565b03613d155760208201516105dc906001600160a01b03166380ac58cd60e01b613fb9565b600282516003811115613d2a57613d2a614411565b03613d4e5760208201516105dc906001600160a01b0316636cdb3d1360e11b613fb9565b600382516003811115613d6357613d63614411565b036133d95760208201516105dc906001600160a01b0316639a20483d60e01b613fb9565b6000613d938583612f28565b60208601516060870151604051630b620b8160e01b81526001600160a01b038781166004830152868116602483015292831660448201526064810191909152919250851690630b620b8190608401600060405180830381600087803b158015613dfb57600080fd5b505af1158015613e0f573d6000803e3d6000fd5b50505050613e20858284600161317f565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f4c6641e50ab591b51c5b75ab0d3721eb0357eac106223e5d21b1ceb5c2abd303886040516125a39190614eb4565b6040516001600160a01b038316602482015260448101829052611f6c90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613fd5565b6040516001600160a01b03808516602483015283166044820152606481018290526136729085906323b872dd60e01b90608401613e99565b6000613f1b826301ffc9a760e01b613f30565b80156105dc5750613cc1826001600160e01b03195b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015613fa2575060208210155b8015613fae5750600081115b979650505050505050565b6000613fc483613f08565b8015610eea5750610eea8383613f30565b600061402a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166140aa9092919063ffffffff16565b905080516000148061404b57508080602001905181019061404b91906148de565b611f6c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106ef565b6060612f20848460008585600080866001600160a01b031685876040516140d19190614e6c565b60006040518083038185875af1925050503d806000811461410e576040519150601f19603f3d011682016040523d82523d6000602084013e614113565b606091505b5091509150613fae878383876060831561418e578251600003614187576001600160a01b0385163b6141875760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106ef565b5081612f20565b612f2083838151156141a35781518083602001fd5b8060405162461bcd60e51b81526004016106ef9190614360565b6040805160808101909152806000815260200160006001600160a01b0316815260200160008152602001600081525090565b60006020828403121561420157600080fd5b81356001600160e01b031981168114610eea57600080fd5b6000610100828403121561422c57600080fd5b50919050565b60008083601f84011261424457600080fd5b5081356001600160401b0381111561425b57600080fd5b6020830191508360208285010111156136b257600080fd5b6000806000806000610140868803121561428c57600080fd5b6142968787614219565b94506101008601356001600160401b03808211156142b357600080fd5b6142bf89838a01614232565b90965094506101208801359150808211156142d957600080fd5b506142e688828901614232565b969995985093965092949392505050565b60006020828403121561430957600080fd5b5035919050565b60005b8381101561432b578181015183820152602001614313565b50506000910152565b6000815180845261434c816020860160208601614310565b601f01601f19169290920160200192915050565b602081526000610eea6020830184614334565b6001600160a01b0381168114611ebe57600080fd5b8035613bec81614373565b6000806000806000608086880312156143ab57600080fd5b85356143b681614373565b945060208601356143c681614373565b93506040860135925060608601356001600160401b038111156143e857600080fd5b6142e688828901614232565b6000610100828403121561440757600080fd5b610eea8383614219565b634e487b7160e01b600052602160045260246000fd5b80516004811061444757634e487b7160e01b600052602160045260246000fd5b82526020818101516001600160a01b03169083015260408082015190830152606090810151910152565b60ff8d16815264ffffffffff8c811660208301528b811660408301526001600160a01b038b811660608401528a81166080840152891660a0830152871660c082015260e0810186905261024081016144cd610100830187614427565b6144db610180830186614427565b6001600160a01b039390931661020082015261022001529a9950505050505050505050565b60008060006040848603121561451557600080fd5b8335925060208401356001600160401b0381111561453257600080fd5b61453e86828701614232565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156145845761458461454b565b60405290565b60048110611ebe57600080fd5b6000608082840312156145a957600080fd5b604051608081018181106001600160401b03821117156145cb576145cb61454b565b60405282356145d98161458a565b815260208301356145e981614373565b6020820152604083810135908201526060928301359281019290925250919050565b60008060006060848603121561462057600080fd5b8335925060208401359150604084013561463981614373565b809150509250925092565b60008083601f84011261465657600080fd5b5081356001600160401b0381111561466d57600080fd5b6020830191508360208260051b85010111156136b257600080fd5b60008060008060008060008060a0898b0312156146a457600080fd5b88356146af81614373565b975060208901356146bf81614373565b965060408901356001600160401b03808211156146db57600080fd5b6146e78c838d01614644565b909850965060608b013591508082111561470057600080fd5b61470c8c838d01614644565b909650945060808b013591508082111561472557600080fd5b506147328b828c01614232565b999c989b5096995094979396929594505050565b60006020828403121561422c57600080fd5b60006020828403121561476a57600080fd5b610eea8383614746565b60006080828403121561422c57600080fd5b60008060008060006080868803121561479e57600080fd5b85356001600160401b03808211156147b557600080fd5b6147c189838a01614774565b96506147d08960208a01614746565b955060408801359150808211156147e657600080fd5b6147f289838a01614774565b945060608801359150808211156142d957600080fd5b60008060008060008060a0878903121561482157600080fd5b863561482c81614373565b9550602087013561483c81614373565b9450604087013593506060870135925060808701356001600160401b0381111561486557600080fd5b61487189828a01614232565b979a9699509497509295939492505050565b60006020828403121561489557600080fd5b8135610eea81614373565b64ffffffffff81168114611ebe57600080fd5b6000602082840312156148c557600080fd5b8135610eea816148a0565b8015158114611ebe57600080fd5b6000602082840312156148f057600080fd5b8151610eea816148d0565b8051613bec81614373565b60006020828403121561491857600080fd5b8151610eea81614373565b634e487b7160e01b600052601160045260246000fd5b64ffffffffff81811683821601908082111561495757614957614923565b5092915050565b60ff81168114611ebe57600080fd5b600060e0828403121561497f57600080fd5b60405160e081018181106001600160401b03821117156149a1576149a161454b565b60405282356149af81614373565b815260208301356149bf81614373565b80602083015250604083013560408201526060830135606082015260808301356149e88161495e565b608082015260a0838101359082015260c0928301359281019290925250919050565b600060208284031215614a1c57600080fd5b81516001600160401b0380821115614a3357600080fd5b818401915084601f830112614a4757600080fd5b815181811115614a5957614a5961454b565b604051601f8201601f19908116603f01168101908382118183101715614a8157614a8161454b565b81604052828152876020848701011115614a9a57600080fd5b613fae836020830160208801614310565b8135815261010081016020830135614ac281614373565b6001600160a01b03166020830152604083810135908301526060830135614ae8816148a0565b64ffffffffff1660608301526080830135614b02816148a0565b64ffffffffff166080830152614b1a60a08401614388565b6001600160a01b03811660a08401525060c083013560c083015260e083013560e083015292915050565b82815260008251614b5c816020850160208701614310565b919091016020019392505050565b8035614b7581614373565b6001600160a01b031690915250565b602081018235614b9381614373565b6001600160a01b0316909152919050565b600060208284031215614bb657600080fd5b8135610eea816148d0565b6000808335601e19843603018112614bd857600080fd5b8301803591506001600160401b03821115614bf257600080fd5b6020019150368190038213156136b257600080fd5b6000808335601e19843603018112614c1e57600080fd5b8301803591506001600160401b03821115614c3857600080fd5b6020019150600581901b36038213156136b257600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038916815287602082015260a060408201526000614ca160a08301888a614c50565b82810360608401528581526001600160fb1b03861115614cc057600080fd5b8560051b808860208401370182810360209081016080850152614ce69082018587614c50565b9b9a5050505050505050505050565b805163ffffffff81168114613bec57600080fd5b600060808284031215614d1b57600080fd5b604051608081018181106001600160401b0382111715614d3d57614d3d61454b565b80604052508091508251614d508161458a565b81526020830151614d6081614373565b8060208301525060408301516040820152606083015160608201525092915050565b8051613bec816148a0565b600080828403610200811215614da257600080fd5b835192506101e080601f1983011215614dba57600080fd5b614dc2614561565b9150614dd0602086016148fb565b8252614dde604086016148fb565b6020830152614def60608601614cf5565b6040830152614e018660808701614d09565b6060830152610100614e1587828801614d09565b608084015261018086015160a0840152614e326101a08701614d82565b60c08401526101c086015160e0840152940151938101939093525092909150565b828152604060208201526000612f206040830184614334565b60008251614e7e818460208701614310565b9190910192915050565b600060208284031215614e9a57600080fd5b5051919050565b808201808211156105dc576105dc614923565b608081016105dc8284614427565b84516001600160a01b0316815260006102206020870151614eee60208501826001600160a01b03169052565b506040870151614f06604085018263ffffffff169052565b506060870151614f196060850182614427565b506080870151614f2c60e0850182614427565b5060a087015161016084015260c087015164ffffffffff1661018084015260e08701516101a08401526101008701516101c0840152614f6f6101e0840187614b6a565b80610200840152613fae8184018587614c50565b600060208284031215614f9557600080fd5b815161ffff81168114610eea57600080fd5b818103818111156105dc576105dc614923565b634e487b7160e01b600052601260045260246000fd5b600082614fed57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561500c5761500c614923565b500290565b60006020828403121561502357600080fd5b8151610eea8161495e56fea264697066735822122051d5b16387d067513f9505182d0488c31c06ae293a0c91d3a1c1ab286f19210064736f6c63430008100033",
    "sourceMap": "2759:7:86:-:0;1374:48237;2759:7;;1374:48237;2759:7;;;-1:-1:-1;;;2759:7:86;;2591:95;;2696:26;;2742:25;;;;:::i;:::-;;;;-1:-1:-1;;2742:25:86;;;;;;;;;2732:36;;2742:25;2732:36;;;;2571:249;;;692:25:119;;;;733:18;;726:34;;;;776:18;;;769:34;;;;2778:13:86;819:18:119;;;812:34;2809:4:86;862:19:119;;;855:61;664:19;;2571:249:86;;;-1:-1:-1;;2571:249:86;;;;;;;;;2561:260;;2571:249;2561:260;;;;2517:304;;12620:402;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12789:18:86;;;;;12817:31;;;;;12858:27;;;;;12895:45;;;;12950:65;;;1374:48237;;14:414:119;145:3;183:6;177:13;208:1;218:129;232:6;229:1;226:13;218:129;;;330:4;314:14;;;310:25;;304:32;291:11;;;284:53;247:12;218:129;;;-1:-1:-1;402:1:119;366:16;;391:13;;;-1:-1:-1;366:16:119;14:414;-1:-1:-1;14:414:119:o;927:177::-;1006:13;;-1:-1:-1;;;;;1048:31:119;;1038:42;;1028:70;;1094:1;1091;1084:12;1028:70;927:177;;;:::o;1109:550::-;1215:6;1223;1231;1239;1247;1300:3;1288:9;1279:7;1275:23;1271:33;1268:53;;;1317:1;1314;1307:12;1268:53;1340:40;1370:9;1340:40;:::i;:::-;1330:50;;1399:49;1444:2;1433:9;1429:18;1399:49;:::i;:::-;1389:59;;1467:49;1512:2;1501:9;1497:18;1467:49;:::i;:::-;1457:59;;1535:49;1580:2;1569:9;1565:18;1535:49;:::i;:::-;1525:59;;1603:50;1648:3;1637:9;1633:19;1603:50;:::i;:::-;1593:60;;1109:550;;;;;;;;:::o;:::-;1374:48237:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106102065760003560e01c8063640d16ed1161011a578063a11a581c116100ad578063c81980801161007c578063c819808014610522578063da8c3b7014610535578063f23a6e6114610548578063f51123151461055b578063ffa1ad741461056e57600080fd5b8063a11a581c146104d8578063a2d00469146104e1578063bc197c81146104ed578063c399e17d1461050057600080fd5b80637f24133f116100e95780637f24133f1461047657806389d99a051461048057806394aedc2f1461049e5780639788ad55146104b157600080fd5b8063640d16ed146104065780637122192c1461042957806374baf6ef1461043c57806379502c551461044f57600080fd5b80632c8ebec81161019d5780633e6df5121161016c5780633e6df512146103705780634acacdda1461039b57806358099d96146103c257806358b5d263146103e9578063632c6a23146103f357600080fd5b80632c8ebec8146103055780633644e5151461030f578063365a86fc14610336578063376af4d11461035d57600080fd5b8063111d8a15116101d9578063111d8a151461029a578063150b7a02146102af57806325f2c190146102db5780632c3eae8a146102f257600080fd5b806301ffc9a71461020b578063028232ea1461023357806306d37817146102485780630ee1ba1714610287575b600080fd5b61021e6102193660046141ef565b610590565b60405190151581526020015b60405180910390f35b610246610241366004614273565b6105e2565b005b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161022a565b6102466102953660046142f7565b610c9b565b6102a2610dee565b60405161022a9190614360565b6102c26102bd366004614393565b610e82565b6040516001600160e01b0319909116815260200161022a565b6102e461011281565b60405190815260200161022a565b6102e46103003660046142f7565b610ebf565b6102e46276a70081565b6102e47f000000000000000000000000000000000000000000000000000000000000000081565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b61024661036b3660046143f4565b610ef1565b61038361037e3660046142f7565b610fd1565b60405161022a9c9b9a99989796959493929190614471565b6102e47f9ff198f1043fd251b64c2f21c2278160819a77a1da50cf8284dc53af040fa71781565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b6102e4620186a081565b610246610401366004614500565b6111ec565b61021e6104143660046142f7565b60016020526000908152604090205460ff1681565b61021e610437366004614597565b61140d565b6102e461044a3660046143f4565b611439565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b6102e46201518081565b61048961025881565b60405163ffffffff909116815260200161022a565b6102466104ac36600461460b565b611506565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b6102e461271081565b6102e46402540be40081565b6102c26104fb366004614688565b6116c3565b61050c64174876e80081565b60405164ffffffffff909116815260200161022a565b6102e4610530366004614758565b6116de565b6102e4610543366004614786565b6116f1565b6102c2610556366004614808565b611ba4565b6102e46105693660046142f7565b611be2565b6102a26040518060400160405280600381526020016218971960e91b81525081565b60006001600160e01b031982166301ffc9a760e01b14806105c157506001600160e01b03198216630a85bd0160e11b145b806105dc57506001600160e01b03198216630271189760e51b145b92915050565b843560009081526020819052604081208054909160ff909116900361061a576040516335cee39560e01b815260040160405180910390fd5b805460ff1660030361063f57604051631062e18f60e01b815260040160405180910390fd5b600061064a87611439565b60008181526001602052604090205490915060ff166106f8576106b361067660c0890160a08a01614883565b8288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7592505050565b6106f8576106c760c0880160a08901614883565b6040516301d2d55760e31b81526001600160a01b039091166004820152602481018290526044015b60405180910390fd5b61070860a08801608089016148b3565b64ffffffffff16421061074f574261072660a0890160808a016148b3565b60405163aa2fd92560e01b8152600481019290925264ffffffffff1660248201526044016106ef565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663f291a62c61078e60c08a0160a08b01614883565b60405160e083811b6001600160e01b03191682526001600160a01b0392909216600482015260c08b01356024820152908a01356044820152606401602060405180830381865afa1580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080a91906148de565b6108575761081e60c0880160a08901614883565b604051632108c30560e11b81526001600160a01b03909116600482015260c0880135602482015260e088013560448201526064016106ef565b6040516331a9108f60e11b8152873560048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa1580156108bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e39190614906565b90506001600160a01b038116330361096f5760028301546001600160a01b031661091360c08a0160a08b01614883565b6001600160a01b03161461096a5760028301546001600160a01b031661093f60c08a0160a08b01614883565b604051627c5e8760e31b81526001600160a01b039283166004820152911660248201526044016106ef565b6109d5565b60028301546001600160a01b031633036109bc576001600160a01b03811661099d60c08a0160a08b01614883565b6001600160a01b03161461096a578061093f60c08a0160a08b01614883565b604051639d29f3a960e01b815260040160405180910390fd5b620151806109e960808a0160608b016148b3565b64ffffffffff161015610a3257610a066080890160608a016148b3565b604051631a16ab3160e11b815264ffffffffff90911660048201526201518060248201526044016106ef565b6276a700610a4660808a0160608b016148b3565b64ffffffffff161115610a8f57610a636080890160608a016148b3565b604051631a16ab3160e11b815264ffffffffff90911660048201526276a70060248201526044016106ef565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663f79924a9610ace60c08b0160a08c01614883565b60405160e083811b6001600160e01b03191682526001600160a01b0392909216600482015260c08c01356024820152908b01356044820152606401600060405180830381600087803b158015610b2357600080fd5b505af1158015610b37573d6000803e3d6000fd5b505050506001830154600160c81b900464ffffffffff16610b5e60808a0160608b016148b3565b610b689082614939565b60018501805464ffffffffff60c81b1916600160c81b64ffffffffff938416810291909117918290556040805185851681529190920490921660208301528a35917f16e70f82a9a68fdbf6cc67068dcfadcaf1e0c61409aa3a24122767789ccc20d5910160405180910390a26000610be660408b0160208c01614883565b6001600160a01b031614158015610c01575060008960400135115b15610c90576000610c2e60408b01803590610c1f9060208e01614883565b6001600160a01b031690611e1b565b9050610c3981611e53565b8515610c74576000610c4d8789018961496d565b9050610c6933610c6360408e0160208f01614883565b83611ec1565b610c7281611f71565b505b6002850154610c8e9082906001600160a01b031685612028565b505b505050505050505050565b6000818152602081905260409081902090516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190614906565b6001600160a01b031614610d5c57604051632a0a3d8160e11b815260040160405180910390fd5b805460ff16600003610d81576040516335cee39560e01b815260040160405180910390fd5b805460ff16600303610d9d57610d998233600061209f565b5050565b805460ff166002148015610dc45750600181015442600160c81b90910464ffffffffff1611155b15610dd557610d998233600161209f565b6040516311d01f2b60e31b815260040160405180910390fd5b604051630233557560e41b81523060048201526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632335575090602401600060405180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e7d9190810190614a0a565b905090565b60006001600160a01b0386163014610ead576040516382a1dea160e01b815260040160405180910390fd5b50630a85bd0160e11b95945050505050565b6000818152602081905260408120805460ff168203610ee15750600092915050565b610eea83612184565b9392505050565b610f0160c0820160a08301614883565b6001600160a01b0316336001600160a01b031614610f5357610f2960c0820160a08301614883565b604051627c5e8760e31b81526001600160a01b0390911660048201523360248201526044016106ef565b6000610f5e82611439565b6000818152600160208190526040909120805460ff191690911790559050610f8c60c0830160a08401614883565b6001600160a01b0316817f3404b1a797c8c84bf93d13290f9f6e7464634602778a1ffa1fc7d8708668022e84604051610fc59190614aab565b60405180910390a35050565b600080600080600080600080610fe56141bd565b610fed6141bd565b60008b815260208190526040812081906110068e6121aa565b9c508060010160149054906101000a900464ffffffffff169b508060010160199054906101000a900464ffffffffff169a508060020160009054906101000a90046001600160a01b031699508060030160009054906101000a90046001600160a01b031698508060000160009054906101000a900460ff1660ff1660000361108f576000611118565b6040516331a9108f60e11b8152600481018f90526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190614906565b6003820154600483015460058401548454939b50600160a01b90920464ffffffffff16995097506111579161010090046001600160a01b031690611e1b565b60408051608081019091526006830180549297509091829060ff16600381111561118357611183614411565b600381111561119457611194614411565b815281546001600160a01b03610100909104811660208301526001808401546040840152600290930154606090920191909152908301549195501692506111da8e610ebf565b91505091939597999b5091939597999b565b60008381526020819052604090208054600182015461121c9160ff1690600160c81b900464ffffffffff166121f6565b6112258461226e565b81156112635760006112398385018561496d565b825490915061125890339061010090046001600160a01b031683611ec1565b61126181611f71565b505b600061126e85612184565b82549091506112959061128f9061010090046001600160a01b031683611e1b565b336122d7565b604080516080810190915260068301805461130f929190829060ff1660038111156112c2576112c2614411565b60038111156112d3576112d3614411565b815281546001600160a01b0361010090910481166020830152600183015460408301526002928301546060909201919091529085015416612343565b6040516331a9108f60e11b81526004810186905230906394aedc2f90879084907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a49190614906565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b03166044820152606401600060405180830381600087803b1580156113f357600080fd5b505af1925050508015611404575060015b505b5050505050565b60006105dc827f00000000000000000000000000000000000000000000000000000000000000006123a2565b60007f00000000000000000000000000000000000000000000000000000000000000007f9ff198f1043fd251b64c2f21c2278160819a77a1da50cf8284dc53af040fa7178360405160200161148e9190614aab565b60408051601f19818403018152908290526114ac9291602001614b44565b604051602081830303815290604052805190602001206040516020016114e992919061190160f01b81526002810192909252602282015260420190565b604051602081830303815290604052805190602001209050919050565b3330146115265760405163edd7338f60e01b815260040160405180910390fd5b6000838152602081905260409020805460ff166003146115465750505050565b60038101546001600160a01b038381169116146115635750505050565b600181015481546001600160a01b039182169160009161158a916101009091041686611e1b565b9050611595866123be565b836001600160a01b0316826001600160a01b0316036115bd576115b88185612343565b61168e565b60405163b209123160e01b81526001600160a01b0383811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b209123190602401602060405180830381865afa158015611628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164c9190614906565b90506001600160a01b03811661168057604051632f9526c360e11b81526001600160a01b03841660048201526024016106ef565b61168c828285886124b2565b505b60405160009087907f01c41914692eda9e423c83b28344603636e57a2803060f6778fea9ba50e71b73908390a3505050505050565b60006040516382a1dea160e01b815260040160405180910390fd5b6000816040516020016114e99190614b84565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d019577a61172f6020890189614883565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201527fc0ba7a416221f318a8087fd62f9ff407488b7f5501e79caf9b0666c2df326b9c6024820152604401602060405180830381865afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd91906148de565b611819576117ce6020870187614883565b604051630b92eb2560e11b81526001600160a01b0390911660048201527fc0ba7a416221f318a8087fd62f9ff407488b7f5501e79caf9b0666c2df326b9c60248201526044016106ef565b6118296040850160208601614ba4565b156118b25760408051630a69412f60e21b81523360048201529085013560248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906329a504bc90604401600060405180830381600087803b15801561189957600080fd5b505af11580156118ad573d6000803e3d6000fd5b505050505b8335156118ed5783356000908152602081905260409020805460018201546118eb9160ff1690600160c81b900464ffffffffff166121f6565b505b6000806118fd6020890189614883565b6001600160a01b03166301e8327233883561191b60208d018d614bc1565b61192860408f018f614c07565b8f80606001906119389190614bc1565b6040518963ffffffff1660e01b815260040161195b989796959493929190614c79565b610200604051808303816000875af115801561197b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199f9190614d8d565b805191935091506001600160a01b031633148015906119ca57506119c2876116de565b8160e0015114155b156119ff578060e001516119dd886116de565b604051633188f56d60e11b8152600481019290925260248201526044016106ef565b61025863ffffffff16816040015163ffffffff161015611a4857604080820151905163387a058b60e01b815263ffffffff909116600482015261025860248201526044016106ef565b64174876e80064ffffffffff168160c0015164ffffffffff161115611a9a5760c0810151604051630fb8adc560e41b815264ffffffffff909116600482015264174876e80060248201526044016106ef565b8535600003611ac257611ab08160800151611e53565b611abd8160600151611e53565b611acd565b611acd8635826125b2565b611ae782611ade60208b018b614883565b838a8989612707565b92506000611af86060880188614bc1565b90501115611b3c576000611b0f6060880188614bc1565b810190611b1c919061496d565b9050611b313383608001516020015183611ec1565b611b3a81611f71565b505b8535600003611b5457611b4f81886129b4565b611b99565b611b5e863561226e565b611b6a86358289612b54565b60405183908735907fdcebfa2e6797f7ce57def09d53b735c278982e3b8c71c9fa63f167148c4cab3790600090a35b505095945050505050565b60006001600160a01b0387163014611bcf576040516382a1dea160e01b815260040160405180910390fd5b5063f23a6e6160e01b9695505050505050565b6000818152602081905260408120805460ff168203611c045750600092915050565b611c0d836121aa565b6001820154600483015460038401546040805160ff95909516602086015264ffffffffff600160c81b9094048416908501526060840191909152600160a01b900416608082015260a00160405160208183030381529060405280519060200120915050919050565b60006001600160a01b0384163b15611d7057600080856001600160a01b0316631626ba7e60e01b8686604051602401611caf929190614e53565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611ced9190614e6c565b600060405180830381855afa9150503d8060008114611d28576040519150601f19603f3d011682016040523d82523d6000602084013e611d2d565b606091505b5091509150818015611d40575080516020145b8015611d6757508051630b135d3f60e11b90611d659083016020908101908401614e88565b145b92505050610eea565b60008060008451604103611d985750505060208201516040830151606084015160001a611def565b8451604003611dd157602085015160408601519093506001600160ff1b0381169250611dc960ff82901c601b614ea1565b915050611def565b845160405163058676ad60e31b81526004016106ef91815260200190565b611dfb86828585612efe565b6001600160a01b0316876001600160a01b03161493505050509392505050565b611e236141bd565b506040805160808101825260008082526001600160a01b0394909416602082015290810192909252606082015290565b611e5c8161140d565b611ebe5780516003811115611e7357611e73614411565b60208201516040808401516060850151915163032163e160e11b815260ff90941660048501526001600160a01b039092166024840152604483019190915260648201526084016106ef565b50565b80516001600160a01b031615611f6c57826001600160a01b031681602001516001600160a01b031614611f20576020810151604051637c14fe8960e01b81526001600160a01b03918216600482015290841660248201526044016106ef565b816001600160a01b031681600001516001600160a01b031614611f6c5780516040516329be2d5d60e21b81526001600160a01b03918216600482015290831660248201526044016106ef565b505050565b80516001600160a01b031615611ebe57805160208201516040808401516060850151608086015160a087015160c0880151945163d505accf60e01b81526001600160a01b0396871660048201523060248201526044810194909452606484019290925260ff16608483015260a482015260c481019190915291169063d505accf9060e401600060405180830381600087803b15801561200f57600080fd5b505af1925050508015612020575060015b15611ebe5750565b60006120348483612f28565b9050612041848484613172565b61204e848284600161317f565b816001600160a01b0316836001600160a01b03167f0272ef83f5953daad3d7708e6b4442e126f1e049e62a01c1fc53683f3277199c866040516120919190614eb4565b60405180910390a350505050565b600083815260208190526040812090826120da576120d56120bf86612184565b835461010090046001600160a01b031690611e1b565b612140565b6040805160808101909152600683018054829060ff16600381111561210157612101614411565b600381111561211257612112614411565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546060909101525b905061214b856123be565b6040518315159086907f01c41914692eda9e423c83b28344603636e57a2803060f6778fea9ba50e71b7390600090a36114068185612343565b600081815260208190526040812061219b816131dc565b8160050154610eea9190614ea1565b6000818152602081905260408120805460ff1660021480156121df5750600181015442600160c81b90910464ffffffffff1611155b6121ed57805460ff16610eea565b60049392505050565b8160ff1660000361221a576040516335cee39560e01b815260040160405180910390fd5b8160ff1660021461223e576040516331fe4d5d60e01b815260040160405180910390fd5b428164ffffffffff1611610d9957604051631e3cd61560e01b815264ffffffffff821660048201526024016106ef565b6000818152602081905260409020805460ff19166003178155612290816131dc565b600482015560038101805464ffffffffff60a01b1916905560405182907ff1e5b832ef53e7d611651983b38ff941f4d2049e9c8962c623c2664bca312bc090600090a25050565b60006122e38330612f28565b90506122f083833061327a565b6122fd838230600161317f565b816001600160a01b03167f019fcaae912e42069954835069f1c8184411022f86cf749694625f2a2313b6ab846040516123369190614eb4565b60405180910390a2505050565b600061234f8383612f28565b905061235c833084613172565b612369838284600161317f565b816001600160a01b03167fc2b8da69776ffa72ca2d7c4a31390d57bd4871cef8066bbe7f1e5bf220a310f1846040516123369190614eb4565b60006123ae8383613287565b8015610eea5750610eea83613335565b604051630852cd8d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b50505060009182525060208190526040812080546001600160a81b031990811682556001820180546001600160f01b03191690556002820180546001600160a01b03191690556003820180546001600160c81b0319169055600482018390556005820183905560068201805490911690556007810182905560080155565b60006124be8530612f28565b90506124cb85308661327a565b6020850151606086015160405163107c8ed760e01b81526001600160a01b0386811660048301528581166024830152928316604482015260648101919091529085169063107c8ed790608401600060405180830381600087803b15801561253157600080fd5b505af1158015612545573d6000803e3d6000fd5b50505050612556858230600061317f565b816001600160a01b0316836001600160a01b0316856001600160a01b03167fb58f4e60b4600784c073e07e7bb67825fe64b4592b5c7ce254599a9b8dcc4d82886040516125a39190614eb4565b60405180910390a45050505050565b600082815260208181526040909120608083015190910151815461010090046001600160a01b0390811691161415806125f15750608082015160600151155b1561260f57604051635f860c6160e11b815260040160405180910390fd5b606082015151600381111561262657612626614411565b600682015460ff16600381111561263f5761263f614411565b14158061266a5750606082015160200151600682015461010090046001600160a01b03908116911614155b806126815750606082015160400151600782015414155b8061269757506060808301510151600882015414155b156126b55760405163175bb1b760e21b815260040160405180910390fd5b602082015160028201546001600160a01b03908116911614611f6c576002810154602083015160405163d4b919f760e01b81526001600160a01b039283166004820152911660248201526044016106ef565b83516040516335313c2160e11b81526001600160a01b0391821660048201526000917f00000000000000000000000000000000000000000000000000000000000000001690636a627842906024016020604051808303816000875af1158015612774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127989190614e88565b600081815260208181526040909120805460808901518301516001600160a01b0316610100026001600160a81b03199091161760021781559192506127df90860186614883565b60018201805464ffffffffff42908116600160a01b026001600160c81b03199092166001600160a01b039490941693909317179055604087015161282b9163ffffffff90911690614939565b60018201805464ffffffffff928316600160c81b0264ffffffffff60c81b1990911617905560208701516002830180546001600160a01b039283166001600160a01b031991821617909155885160038501805491909316911617905560c08701516128a6916128a19116610112620186a0613413565b6134fd565b6003808301805464ffffffffff93909316600160a01b0264ffffffffff60a01b199093169290921790915560a0870151600483015560808701516060908101516005840155870151805160068401805492939092839160ff1990911690600190849081111561291757612917614411565b021790555060208201518160000160016101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816001015560608201518160020155905050866001600160a01b031688837ffaeed8c21a13a10e299d00abac61501436fa5faf27ddd94540a3815fb98ce737898989896040516129a19493929190614ec2565b60405180910390a4509695505050505050565b6129c6826060015183602001516122d7565b81516001600160a01b03166129de6020830183614883565b6001600160a01b0316146129fb576129fb82608001518383613567565b600080612a917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a839190614f83565b856080015160600151613678565b608086015191935091508215612b3b5782816060018181525050612b3b8186600001517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c415b95c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b369190614906565b612028565b6060810182905284516020860151611406918391612028565b60008381526020819052604080822090516331a9108f60e11b8152600481018690529091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015612bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bee9190614906565b90506000612bfb86612184565b9050600080612c937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c859190614f83565b886080015160600151613678565b915091506000612ca384836136b9565b90506000848311612cb5576000612cbf565b612cbf8584614fa7565b90506000808211612cd957612cd48487614fa7565b612cdc565b60005b90506000876001600160a01b03168b600001516001600160a01b0316141580612d3c575060038901546001600160a01b038981169116148015612d3c5750612d2760208b018b614883565b60018a01546001600160a01b03908116911614155b60808c01518c51919250906001600160a01b0316612d5d60208d018d614883565b6001600160a01b031614612d9e578382612d78576000612d7a565b855b612d849089614ea1565b612d8e9190614ea1565b6060820152612d9e818d8d613567565b8615612e155786816060018181525050612e15818d600001517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c415b95c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b12573d6000803e3d6000fd5b8115612e2f57606081018590528b51612e2f9082906122d7565b8315612e5357606081018490528b5160208d0151612e4e918391612028565b612e70565b8215612e70576060810183905260208c0151612e709082906122d7565b306394aedc2f8e8585612e84576000612e86565b885b612e909190614ea1565b6040516001600160e01b031960e085901b168152600481019290925260248201526001600160a01b038c166044820152606401600060405180830381600087803b158015612edd57600080fd5b505af1925050508015612eee575060015b5050505050505050505050505050565b6000806000612f0f878787876136cf565b91509150612f1c81613793565b5090505b949350505050565b60008083516003811115612f3e57612f3e614411565b03612fbb5760208301516040516370a0823160e01b81526001600160a01b038481166004830152909116906370a08231906024015b602060405180830381865afa158015612f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb49190614e88565b90506105dc565b600183516003811115612fd057612fd0614411565b0361307857816001600160a01b031683602001516001600160a01b0316636352211e85604001516040518263ffffffff1660e01b815260040161301591815260200190565b602060405180830381865afa158015613032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130569190614906565b6001600160a01b03161461306b57600061306e565b60015b60ff1690506105dc565b60028351600381111561308d5761308d614411565b036130d05760208301516040808501519051627eeac760e11b81526001600160a01b038581166004830152602482019290925291169062fdd58e90604401612f73565b6003835160038111156130e5576130e5614411565b0361312a57816001600160a01b031683602001516001600160a01b0316636352211e85604001516040518263ffffffff1660e01b815260040161301591815260200190565b60405162461bcd60e51b815260206004820181905260248201527f4d756c7469546f6b656e3a20556e737570706f727465642063617465676f727960448201526064016106ef565b611f6c83838360016138dd565b60008161319e5761318f85613b96565b6131999085614fa7565b6131b1565b6131a785613b96565b6131b19085614ea1565b90506131bd8584612f28565b8114611406576040516345ffc53d60e11b815260040160405180910390fd5b6003810154600090600160a01b900464ffffffffff16810361320057506004015490565b6001820154600090620151809061322590600160a01b900464ffffffffff1642614fa7565b61322f9190614fd0565b60058401546003850154919250600091613268919061325d908590600160a01b900464ffffffffff16614ff2565b6402540be400613413565b9050808460040154612f209190614ea1565b611f6c83838360006138dd565b6020820151604051638481ab0760e01b81526001600160a01b039182166004820152600091829190841690638481ab0790602401602060405180830381865afa1580156132d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fc9190615011565b905060ff8082161461332c57835160ff821690600381111561332057613320614411565b60ff16149150506105dc565b612f2084613bf1565b6000808251600381111561334b5761334b614411565b036133675760408201511561336257506000919050565b61340b565b60018251600381111561337c5761337c614411565b036133935760608201511561336257506000919050565b6002825160038111156133a8576133a8614411565b1461340b576003825160038111156133c2576133c2614411565b036133d95760608201511561336257506000919050565b815160038111156133ec576133ec614411565b604051635928f9a360e11b815260ff90911660048201526024016106ef565b506001919050565b600080806000198587098587029250828110838203039150508060000361344d5783828161344357613443614fba565b0492505050610eea565b8084116134945760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016106ef565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600064ffffffffff8211156135635760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526530206269747360d01b60648201526084016106ef565b5090565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663b20912316135a56020850185614883565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156135e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360d9190614906565b90506001600160a01b03811661364f5761362a6020830183614883565b604051632f9526c360e11b81526001600160a01b0390911660048201526024016106ef565b60608401511561367257613672848261366b6020860186614883565b8651613d87565b50505050565b6000808361ffff16600003613692575060009050816136b2565b6136a3838561ffff16612710613413565b91506136af8284614fa7565b90505b9250929050565b60008183106136c85781610eea565b5090919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613706575060009050600361378a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561375a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166137835760006001925092505061378a565b9150600090505b94509492505050565b60008160048111156137a7576137a7614411565b036137af5750565b60018160048111156137c3576137c3614411565b036138105760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106ef565b600281600481111561382457613824614411565b036138715760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106ef565b600381600481111561388557613885614411565b03611ebe5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106ef565b6000845160038111156138f2576138f2614411565b0361395a57306001600160a01b038416036139325761392d82856060015186602001516001600160a01b0316613e6d9092919063ffffffff16565b613672565b61392d8383866060015187602001516001600160a01b0316613ed0909392919063ffffffff16565b60018451600381111561396f5761396f614411565b03613a4a57806139f457602084015160408086015190516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201929092529116906323b872dd906064015b600060405180830381600087803b1580156139d757600080fd5b505af11580156139eb573d6000803e3d6000fd5b50505050613672565b60208401516040808601519051635c46a7ef60e11b81526001600160a01b03868116600483015285811660248301526044820192909252608060648201526000608482015291169063b88d4fde9060a4016139bd565b600284516003811115613a5f57613a5f614411565b03613ae45783602001516001600160a01b031663f242432a848487604001518860600151600014613a94578860600151613a97565b60015b6040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529390921660248401526044830152606482015260a06084820152600060a482015260c4016139bd565b600384516003811115613af957613af9614411565b0361312a57306001600160a01b03841603613b4e576020840151604080860151905163a9059cbb60e01b81526001600160a01b038581166004830152602482019290925291169063a9059cbb906044016139bd565b602084015160408086015190516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201929092529116906323b872dd906064016139bd565b60008082516003811115613bac57613bac614411565b03613bb957506060015190565b600282516003811115613bce57613bce614411565b148015613bdf575060008260600151115b1561340b57506060015190565b919050565b60008082516003811115613c0757613c07614411565b03613cdc57613c2282602001516001600160a01b0316613f08565b15613cc8576020820151613c46906001600160a01b03166336372b0760e01b613f30565b15613c5357506001919050565b6020820151613c72906001600160a01b03166380ac58cd60e01b613f30565b158015613c9b57506020820151613c99906001600160a01b0316636cdb3d1360e11b613f30565b155b80156105dc57506020820151613cc1906001600160a01b0316639a20483d60e01b613f30565b1592915050565b50602001516001600160a01b03163b151590565b600182516003811115613cf157613cf1614411565b03613d155760208201516105dc906001600160a01b03166380ac58cd60e01b613fb9565b600282516003811115613d2a57613d2a614411565b03613d4e5760208201516105dc906001600160a01b0316636cdb3d1360e11b613fb9565b600382516003811115613d6357613d63614411565b036133d95760208201516105dc906001600160a01b0316639a20483d60e01b613fb9565b6000613d938583612f28565b60208601516060870151604051630b620b8160e01b81526001600160a01b038781166004830152868116602483015292831660448201526064810191909152919250851690630b620b8190608401600060405180830381600087803b158015613dfb57600080fd5b505af1158015613e0f573d6000803e3d6000fd5b50505050613e20858284600161317f565b816001600160a01b0316836001600160a01b0316856001600160a01b03167f4c6641e50ab591b51c5b75ab0d3721eb0357eac106223e5d21b1ceb5c2abd303886040516125a39190614eb4565b6040516001600160a01b038316602482015260448101829052611f6c90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613fd5565b6040516001600160a01b03808516602483015283166044820152606481018290526136729085906323b872dd60e01b90608401613e99565b6000613f1b826301ffc9a760e01b613f30565b80156105dc5750613cc1826001600160e01b03195b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015613fa2575060208210155b8015613fae5750600081115b979650505050505050565b6000613fc483613f08565b8015610eea5750610eea8383613f30565b600061402a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166140aa9092919063ffffffff16565b905080516000148061404b57508080602001905181019061404b91906148de565b611f6c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106ef565b6060612f20848460008585600080866001600160a01b031685876040516140d19190614e6c565b60006040518083038185875af1925050503d806000811461410e576040519150601f19603f3d011682016040523d82523d6000602084013e614113565b606091505b5091509150613fae878383876060831561418e578251600003614187576001600160a01b0385163b6141875760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106ef565b5081612f20565b612f2083838151156141a35781518083602001fd5b8060405162461bcd60e51b81526004016106ef9190614360565b6040805160808101909152806000815260200160006001600160a01b0316815260200160008152602001600081525090565b60006020828403121561420157600080fd5b81356001600160e01b031981168114610eea57600080fd5b6000610100828403121561422c57600080fd5b50919050565b60008083601f84011261424457600080fd5b5081356001600160401b0381111561425b57600080fd5b6020830191508360208285010111156136b257600080fd5b6000806000806000610140868803121561428c57600080fd5b6142968787614219565b94506101008601356001600160401b03808211156142b357600080fd5b6142bf89838a01614232565b90965094506101208801359150808211156142d957600080fd5b506142e688828901614232565b969995985093965092949392505050565b60006020828403121561430957600080fd5b5035919050565b60005b8381101561432b578181015183820152602001614313565b50506000910152565b6000815180845261434c816020860160208601614310565b601f01601f19169290920160200192915050565b602081526000610eea6020830184614334565b6001600160a01b0381168114611ebe57600080fd5b8035613bec81614373565b6000806000806000608086880312156143ab57600080fd5b85356143b681614373565b945060208601356143c681614373565b93506040860135925060608601356001600160401b038111156143e857600080fd5b6142e688828901614232565b6000610100828403121561440757600080fd5b610eea8383614219565b634e487b7160e01b600052602160045260246000fd5b80516004811061444757634e487b7160e01b600052602160045260246000fd5b82526020818101516001600160a01b03169083015260408082015190830152606090810151910152565b60ff8d16815264ffffffffff8c811660208301528b811660408301526001600160a01b038b811660608401528a81166080840152891660a0830152871660c082015260e0810186905261024081016144cd610100830187614427565b6144db610180830186614427565b6001600160a01b039390931661020082015261022001529a9950505050505050505050565b60008060006040848603121561451557600080fd5b8335925060208401356001600160401b0381111561453257600080fd5b61453e86828701614232565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156145845761458461454b565b60405290565b60048110611ebe57600080fd5b6000608082840312156145a957600080fd5b604051608081018181106001600160401b03821117156145cb576145cb61454b565b60405282356145d98161458a565b815260208301356145e981614373565b6020820152604083810135908201526060928301359281019290925250919050565b60008060006060848603121561462057600080fd5b8335925060208401359150604084013561463981614373565b809150509250925092565b60008083601f84011261465657600080fd5b5081356001600160401b0381111561466d57600080fd5b6020830191508360208260051b85010111156136b257600080fd5b60008060008060008060008060a0898b0312156146a457600080fd5b88356146af81614373565b975060208901356146bf81614373565b965060408901356001600160401b03808211156146db57600080fd5b6146e78c838d01614644565b909850965060608b013591508082111561470057600080fd5b61470c8c838d01614644565b909650945060808b013591508082111561472557600080fd5b506147328b828c01614232565b999c989b5096995094979396929594505050565b60006020828403121561422c57600080fd5b60006020828403121561476a57600080fd5b610eea8383614746565b60006080828403121561422c57600080fd5b60008060008060006080868803121561479e57600080fd5b85356001600160401b03808211156147b557600080fd5b6147c189838a01614774565b96506147d08960208a01614746565b955060408801359150808211156147e657600080fd5b6147f289838a01614774565b945060608801359150808211156142d957600080fd5b60008060008060008060a0878903121561482157600080fd5b863561482c81614373565b9550602087013561483c81614373565b9450604087013593506060870135925060808701356001600160401b0381111561486557600080fd5b61487189828a01614232565b979a9699509497509295939492505050565b60006020828403121561489557600080fd5b8135610eea81614373565b64ffffffffff81168114611ebe57600080fd5b6000602082840312156148c557600080fd5b8135610eea816148a0565b8015158114611ebe57600080fd5b6000602082840312156148f057600080fd5b8151610eea816148d0565b8051613bec81614373565b60006020828403121561491857600080fd5b8151610eea81614373565b634e487b7160e01b600052601160045260246000fd5b64ffffffffff81811683821601908082111561495757614957614923565b5092915050565b60ff81168114611ebe57600080fd5b600060e0828403121561497f57600080fd5b60405160e081018181106001600160401b03821117156149a1576149a161454b565b60405282356149af81614373565b815260208301356149bf81614373565b80602083015250604083013560408201526060830135606082015260808301356149e88161495e565b608082015260a0838101359082015260c0928301359281019290925250919050565b600060208284031215614a1c57600080fd5b81516001600160401b0380821115614a3357600080fd5b818401915084601f830112614a4757600080fd5b815181811115614a5957614a5961454b565b604051601f8201601f19908116603f01168101908382118183101715614a8157614a8161454b565b81604052828152876020848701011115614a9a57600080fd5b613fae836020830160208801614310565b8135815261010081016020830135614ac281614373565b6001600160a01b03166020830152604083810135908301526060830135614ae8816148a0565b64ffffffffff1660608301526080830135614b02816148a0565b64ffffffffff166080830152614b1a60a08401614388565b6001600160a01b03811660a08401525060c083013560c083015260e083013560e083015292915050565b82815260008251614b5c816020850160208701614310565b919091016020019392505050565b8035614b7581614373565b6001600160a01b031690915250565b602081018235614b9381614373565b6001600160a01b0316909152919050565b600060208284031215614bb657600080fd5b8135610eea816148d0565b6000808335601e19843603018112614bd857600080fd5b8301803591506001600160401b03821115614bf257600080fd5b6020019150368190038213156136b257600080fd5b6000808335601e19843603018112614c1e57600080fd5b8301803591506001600160401b03821115614c3857600080fd5b6020019150600581901b36038213156136b257600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038916815287602082015260a060408201526000614ca160a08301888a614c50565b82810360608401528581526001600160fb1b03861115614cc057600080fd5b8560051b808860208401370182810360209081016080850152614ce69082018587614c50565b9b9a5050505050505050505050565b805163ffffffff81168114613bec57600080fd5b600060808284031215614d1b57600080fd5b604051608081018181106001600160401b0382111715614d3d57614d3d61454b565b80604052508091508251614d508161458a565b81526020830151614d6081614373565b8060208301525060408301516040820152606083015160608201525092915050565b8051613bec816148a0565b600080828403610200811215614da257600080fd5b835192506101e080601f1983011215614dba57600080fd5b614dc2614561565b9150614dd0602086016148fb565b8252614dde604086016148fb565b6020830152614def60608601614cf5565b6040830152614e018660808701614d09565b6060830152610100614e1587828801614d09565b608084015261018086015160a0840152614e326101a08701614d82565b60c08401526101c086015160e0840152940151938101939093525092909150565b828152604060208201526000612f206040830184614334565b60008251614e7e818460208701614310565b9190910192915050565b600060208284031215614e9a57600080fd5b5051919050565b808201808211156105dc576105dc614923565b608081016105dc8284614427565b84516001600160a01b0316815260006102206020870151614eee60208501826001600160a01b03169052565b506040870151614f06604085018263ffffffff169052565b506060870151614f196060850182614427565b506080870151614f2c60e0850182614427565b5060a087015161016084015260c087015164ffffffffff1661018084015260e08701516101a08401526101008701516101c0840152614f6f6101e0840187614b6a565b80610200840152613fae8184018587614c50565b600060208284031215614f9557600080fd5b815161ffff81168114610eea57600080fd5b818103818111156105dc576105dc614923565b634e487b7160e01b600052601260045260246000fd5b600082614fed57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561500c5761500c614923565b500290565b60006020828403121561502357600080fd5b8151610eea8161495e56fea264697066735822122051d5b16387d067513f9505182d0488c31c06ae293a0c91d3a1c1ab286f19210064736f6c63430008100033",
    "sourceMap": "1374:48237:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11410:298:93;;;;;;:::i;:::-;;:::i;:::-;;;470:14:119;;463:22;445:41;;433:2;418:18;11410:298:93;;;;;;;;39511:3933:86;;;;;;:::i;:::-;;:::i;:::-;;2861:34;;;;;;;;-1:-1:-1;;;;;2073:32:119;;;2055:51;;2043:2;2028:18;2861:34:86;1892:220:119;33785:846:86;;;;;;:::i;:::-;;:::i;48321:135::-;;;:::i;:::-;;;;;;;:::i;8829:341:93:-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;4254:33:119;;;4236:52;;4224:2;4209:18;8829:341:93;4092:202:119;1996:61:86;;2054:3;1996:61;;;;;4445:25:119;;;4433:2;4418:18;1996:61:86;4299:177:119;31934:242:86;;;;;;:::i;:::-;;:::i;2133:56::-;;2182:7;2133:56;;2517:304;;;;;2828:27;;;;;38601:513;;;;;;:::i;:::-;;:::i;45336:1157::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;2257:253::-;;2311:199;2257:253;;2991:61;;;;;2063:63;;2123:3;2063:63;;28888:1249;;;;;;:::i;:::-;;:::i;8393:55::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;47343:147;;;;;;:::i;:::-;;:::i;43615:347::-;;;;;;:::i;:::-;;:::i;2901:33::-;;;;;2195:55;;2244:6;2195:55;;1733:53;;1776:10;1733:53;;;;;9879:10:119;9867:23;;;9849:42;;9837:2;9822:18;1733:53:86;9705:192:119;35295:1907:86;;;;;;:::i;:::-;;:::i;2940:45::-;;;;;1872:54;;1923:3;1872:54;;1932:57;;1985:4;1932:57;;10561:295:93;;;;;;:::i;:::-;;:::i;1792:55:86:-;;1843:4;1792:55;;;;;12412:12:119;12400:25;;;12382:44;;12370:2;12355:18;1792:55:86;12238:194:119;13399:146:86;;;;;;:::i;:::-;;:::i;14240:3748::-;;;;;;:::i;:::-;;:::i;9667:366:93:-;;;;;;:::i;:::-;;:::i;48709:899:86:-;;;;;;:::i;:::-;;:::i;1486:38::-;;;;;;;;;;;;;;;-1:-1:-1;;;1486:38:86;;;;;11410:298:93;11497:4;-1:-1:-1;;;;;;11532:40:93;;-1:-1:-1;;;11532:40:93;;:104;;-1:-1:-1;;;;;;;11588:48:93;;-1:-1:-1;;;11588:48:93;11532:104;:169;;;-1:-1:-1;;;;;;;11652:49:93;;-1:-1:-1;;;11652:49:93;11532:169;11513:188;11410:298;-1:-1:-1;;11410:298:93:o;39511:3933:86:-;39697:16;;39671:17;39691:23;;;;;;;;;;39778:11;;39691:23;;39778:11;;;;:16;;39774:58;;39815:17;;-1:-1:-1;;;39815:17:86;;;;;;;;;;;39774:58;39846:11;;;;39861:1;39846:16;39842:82;;39912:12;;-1:-1:-1;;;39912:12:86;;;;;;;;;;;39842:82;39971:21;39995:27;40012:9;39995:16;:27::i;:::-;40037:37;;;;:22;:37;;;;;;39971:51;;-1:-1:-1;40037:37:86;;40032:262;;40093:85;40133:18;;;;;;;;:::i;:::-;40153:13;40168:9;;40093:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40093:39:86;;-1:-1:-1;;;40093:85:86:i;:::-;40088:206;;40250:18;;;;;;;;:::i;:::-;40203:91;;-1:-1:-1;;;40203:91:86;;-1:-1:-1;;;;;15345:32:119;;;40203:91:86;;;15327:51:119;15394:18;;;15387:34;;;15300:18;;40203:91:86;;;;;;;;40088:206;40366:20;;;;;;;;:::i;:::-;40347:39;;:15;:39;40343:135;;40426:15;40455:20;;;;;;;;:::i;:::-;40407:71;;-1:-1:-1;;;40407:71:86;;;;;15983:25:119;;;;16056:12;16044:25;16024:18;;;16017:53;15956:18;;40407:71:86;15810:266:119;40343:135:86;-1:-1:-1;;;;;40527:12:86;:26;;40554:18;;;;;;;;:::i;:::-;40527:85;;40596:15;40527:85;;;-1:-1:-1;;;;;;40527:85:86;;;-1:-1:-1;;;;;16301:32:119;;;;40527:85:86;;;16283:51:119;40574:20:86;;;;16350:18:119;;;16343:34;40596:15:86;;;;16393:18:119;;;16386:34;16256:18;;40527:85:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40522:289;;40688:18;;;;;;;;:::i;:::-;40633:178;;-1:-1:-1;;;40633:178:86;;-1:-1:-1;;;;;16301:32:119;;;40633:178:86;;;16283:51:119;40736:20:86;;;;16350:18:119;;;16343:34;40781:15:86;;;;16393:18:119;;;16386:34;16256:18;;40633:178:86;16081:345:119;40522:289:86;40877:35;;-1:-1:-1;;;40877:35:86;;40895:16;;40877:35;;;4445:25:119;40857:17:86;;40877:9;-1:-1:-1;;;;;40877:17:86;;;;4418:18:119;;40877:35:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40857:55;-1:-1:-1;;;;;;40926:23:86;;:10;:23;40922:795;;40991:13;;;;-1:-1:-1;;;;;40991:13:86;40969:18;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40969:35:86;;40965:286;;41155:13;;;;-1:-1:-1;;;;;41155:13:86;41199:18;;;;;;;;:::i;:::-;41101:135;;-1:-1:-1;;;41101:135:86;;-1:-1:-1;;;;;17433:15:119;;;41101:135:86;;;17415:34:119;17485:15;;17465:18;;;17458:43;17350:18;;41101:135:86;17203:304:119;40965:286:86;40922:795;;;41285:13;;;;-1:-1:-1;;;;;41285:13:86;41271:10;:27;41267:450;;-1:-1:-1;;;;;41318:31:86;;:18;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41318:31:86;;41314:278;;41500:9;41540:18;;;;;;;;:::i;41267:450::-;41682:24;;-1:-1:-1;;;41682:24:86;;;;;;;;;;;41267:450;2244:6;41763:18;;;;;;;;:::i;:::-;:43;;;41759:201;;;41880:18;;;;;;;;:::i;:::-;41827:133;;-1:-1:-1;;;41827:133:86;;17715:12:119;17703:25;;;41827:133:86;;;17685:44:119;2244:6:86;17745:18:119;;;17738:34;17658:18;;41827:133:86;17512:266:119;41759:201:86;2182:7;41974:18;;;;;;;;:::i;:::-;:43;;;41970:201;;;42091:18;;;;;;;;:::i;:::-;42038:133;;-1:-1:-1;;;42038:133:86;;17715:12:119;17703:25;;;42038:133:86;;;17685:44:119;2182:7:86;17745:18:119;;;17738:34;17658:18;;42038:133:86;17512:266:119;41970:201:86;-1:-1:-1;;;;;42225:12:86;:24;;42250:18;;;;;;;;:::i;:::-;42225:83;;42292:15;42225:83;;;-1:-1:-1;;;;;;42225:83:86;;;-1:-1:-1;;;;;16301:32:119;;;;42225:83:86;;;16283:51:119;42270:20:86;;;;16350:18:119;;;16343:34;42292:15:86;;;;16393:18:119;;;16386:34;16256:18;;42225:83:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;42376:21:86;;;;-1:-1:-1;;;42376:21:86;;;;42458:18;;;;;;;;:::i;:::-;42431:45;;:24;:45;:::i;:::-;42407:21;;;:69;;-1:-1:-1;;;;42407:69:86;-1:-1:-1;;;42407:69:86;;;;;;;;;;;;;;42514:187;;;18313:15:119;;;18295:34;;42669:21:86;;;;;;;18360:2:119;18345:18;;18338:43;42549:16:86;;;42514:187;;18237:18:119;42514:187:86;;;;;;;42811:1;42770:29;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42770:43:86;;;:79;;;;;42848:1;42817:9;:28;;;:32;42770:79;42766:672;;;42865:36;42904:65;42940:28;;;;;;42904:29;;;;;;:::i;:::-;-1:-1:-1;;;;;42904:35:86;;;:65::i;:::-;42865:104;;43033:30;43050:12;43033:16;:30::i;:::-;43137:21;;43133:232;;43178:20;43201:32;;;;43212:10;43201:32;:::i;:::-;43178:55;-1:-1:-1;43251:63:86;43264:10;43276:29;;;;;;;;:::i;:::-;43307:6;43251:12;:63::i;:::-;43332:18;43343:6;43332:10;:18::i;:::-;43160:205;43133:232;43402:13;;;;43378:49;;43388:12;;-1:-1:-1;;;;;43402:13:86;43417:9;43378;:49::i;:::-;42851:587;42766:672;39661:3783;;;;39511:3933;;;;;:::o;33785:846::-;33839:17;33859:13;;;;;;;;;;;;33937:25;;-1:-1:-1;;;33937:25:86;;;;;4445::119;;;33966:10:86;;-1:-1:-1;;;;;33937:9:86;:17;;;;4418:18:119;;33937:25:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33937:39:86;;33933:90;;33997:26;;-1:-1:-1;;;33997:26:86;;;;;;;;;;;33933:90;34038:11;;;;;:16;34034:590;;34145:17;;-1:-1:-1;;;34145:17:86;;;;;;;;;;;34034:590;34181:11;;;;34196:1;34181:16;34177:447;;34250:77;34277:6;34296:10;34319:5;34250:16;:77::i;:::-;33829:802;33785:846;:::o;34177:447::-;34346:11;;;;34361:1;34346:16;:60;;;;-1:-1:-1;34366:21:86;;;;34391:15;-1:-1:-1;;;34366:21:86;;;;;:40;;34346:60;34342:282;;;34463:76;34490:6;34509:10;34532:4;34463:16;:76::i;34342:282::-;34611:13;;-1:-1:-1;;;34611:13:86;;;;;;;;;;;48321:135;48412:37;;-1:-1:-1;;;48412:37:86;;48443:4;48412:37;;;2055:51:119;48380:13:86;;48412:6;-1:-1:-1;;;;;48412:22:86;;;;2028:18:119;;48412:37:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48412:37:86;;;;;;;;;;;;:::i;:::-;48405:44;;48321:135;:::o;8829:341:93:-;9007:6;-1:-1:-1;;;;;9029:25:93;;9049:4;9029:25;9025:79;;9075:29;;-1:-1:-1;;;9075:29:93;;;;;;;;;;;9025:79;-1:-1:-1;;;;8829:341:93;;;;;;;:::o;31934:242:86:-;32000:7;32039:13;;;;;;;;;;32097:11;;;;:16;;32093:30;;-1:-1:-1;32122:1:86;;31934:242;-1:-1:-1;;31934:242:86:o;32093:30::-;32141:28;32162:6;32141:20;:28::i;:::-;32134:35;31934:242;-1:-1:-1;;;31934:242:86:o;38601:513::-;38750:18;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38736:32:86;:10;-1:-1:-1;;;;;38736:32:86;;38732:133;;38823:18;;;;;;;;:::i;:::-;38789:76;;-1:-1:-1;;;38789:76:86;;-1:-1:-1;;;;;17433:15:119;;;38789:76:86;;;17415:34:119;38852:10:86;17465:18:119;;;17458:43;17350:18;;38789:76:86;17203:304:119;38732:133:86;38919:21;38943:27;38960:9;38943:16;:27::i;:::-;38980:37;;;;39020:4;38980:37;;;;;;;;:44;;-1:-1:-1;;38980:44:86;;;;;;38919:51;-1:-1:-1;39077:18:86;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39040:67:86;39062:13;39040:67;39097:9;39040:67;;;;;;:::i;:::-;;;;;;;;38679:435;38601:513;:::o;45336:1157::-;45401:12;45423:21;45454:23;45487:16;45513:22;45545:17;45572:32;45614:27;45651:30;;:::i;:::-;45691:34;;:::i;:::-;45735:29;45834:13;;;;;;;;;;45735:29;;45867:22;45840:6;45867:14;:22::i;:::-;45858:31;;45916:4;:19;;;;;;;;;;;;45899:36;;45964:4;:21;;;;;;;;;;;;45945:40;;46006:4;:13;;;;;;;;;;-1:-1:-1;;;;;46006:13:86;45995:24;;46046:4;:19;;;;;;;;;;-1:-1:-1;;;;;46046:19:86;46029:36;;46087:4;:11;;;;;;;;;;;;:16;;46102:1;46087:16;:57;;46142:1;46087:57;;;46106:25;;-1:-1:-1;;;46106:25:86;;;;;4445::119;;;-1:-1:-1;;;;;46106:9:86;:17;;;;4418:18:119;;46106:25:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46182:30;;;;46244:24;;;;46312:20;;;;46287:18;;46075:69;;-1:-1:-1;;;;46182:30:86;;;;;;-1:-1:-1;46244:24:86;-1:-1:-1;46287:46:86;;46182:30;46287:18;;-1:-1:-1;;;;;46287:18:86;;:24;:46::i;:::-;46343:28;;;;;;;;;46356:15;;;46343:28;;46278:55;;-1:-1:-1;46343:28:86;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;46343:28:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46405:26;;;;46343:28;;-1:-1:-1;46405:26:86;;-1:-1:-1;46459:27:86;46479:6;46459:19;:27::i;:::-;46441:45;;45804:689;45336:1157;;;;;;;;;;;;;:::o;28888:1249::-;28991:17;29011:13;;;;;;;;;;29057:11;;;29070:21;;;29035:57;;29057:11;;;-1:-1:-1;;;29070:21:86;;;;29035;:57::i;:::-;29142:25;29160:6;29142:17;:25::i;:::-;29223:21;;29219:205;;29260:20;29283:32;;;;29294:10;29283:32;:::i;:::-;29354:18;;29260:55;;-1:-1:-1;29329:52:86;;29342:10;;29354:18;;;-1:-1:-1;;;;;29354:18:86;29260:55;29329:12;:52::i;:::-;29395:18;29406:6;29395:10;:18::i;:::-;29246:178;29219:205;29485:23;29511:28;29532:6;29511:20;:28::i;:::-;29555:18;;29485:54;;-1:-1:-1;29549:60:86;;29555:41;;:18;;;-1:-1:-1;;;;;29555:18:86;29485:54;29555:24;:41::i;:::-;29598:10;29549:5;:60::i;:::-;29668:37;;;;;;;;;29674:15;;;29668:37;;;;;29674:15;29668:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;29668:37:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29691:13;;;;;29668:5;:37::i;:::-;29802:25;;-1:-1:-1;;;29802:25:86;;;;;4445::119;;;29753:4:86;;:23;;29777:6;;29785:15;;29802:9;-1:-1:-1;;;;;29802:17:86;;;;4418:18:119;;29802:25:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29753:75;;-1:-1:-1;;;;;;29753:75:86;;;;;;;;;;21968:25:119;;;;22009:18;;;22002:34;;;;-1:-1:-1;;;;;22072:32:119;22052:18;;;22045:60;21941:18;;29753:75:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29749:382;;28981:1156;;28888:1249;;;:::o;47343:147::-;47417:4;47440:43;47459:5;47466:16;47440:18;:43::i;43615:347::-;43700:7;43789:16;2311:199;43919:9;43908:21;;;;;;;;:::i;:::-;;;;-1:-1:-1;;43908:21:86;;;;;;;;;;43829:114;;;43908:21;43829:114;;:::i;:::-;;;;;;;;;;;;;43819:125;;;;;;43736:218;;;;;;;;-1:-1:-1;;;22738:27:119;;22790:1;22781:11;;22774:27;;;;22826:2;22817:12;;22810:28;22863:2;22854:12;;22480:392;43736:218:86;;;;;;;;;;;;;43726:229;;;;;;43719:236;;43615:347;;;:::o;35295:1907::-;35403:10;35425:4;35403:27;35399:68;;35451:16;;-1:-1:-1;;;35451:16:86;;;;;;;;;;;35399:68;35478:17;35498:13;;;;;;;;;;35526:11;;;;35541:1;35526:16;35522:41;;35556:7;35295:1907;;;:::o;35522:41::-;35693:19;;;;-1:-1:-1;;;;;35693:32:86;;;:19;;:32;35689:57;;35739:7;35295:1907;;;:::o;35689:57::-;35856:26;;;;35934:18;;-1:-1:-1;;;;;35856:26:86;;;;35827;;35934:38;;35856:26;35934:18;;;;35959:12;35934:24;:38::i;:::-;35892:80;;36058:19;36070:6;36058:11;:19::i;:::-;36151:9;-1:-1:-1;;;;;36129:31:86;:18;-1:-1:-1;;;;;36129:31:86;;36125:759;;36176:33;36182:15;36199:9;36176:5;:33::i;:::-;36125:759;;;36267:41;;-1:-1:-1;;;36267:41:86;;-1:-1:-1;;;;;2073:32:119;;;36267:41:86;;;2055:51:119;36240:24:86;;36267:6;:21;;;;;;2028:18:119;;36267:41:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36240:68;-1:-1:-1;;;;;;36380:34:86;;36376:348;;36650:59;;-1:-1:-1;;;36650:59:86;;-1:-1:-1;;;;;2073:32:119;;36650:59:86;;;2055:51:119;2028:18;;36650:59:86;1892:220:119;36376:348:86;36799:74;36813:15;36830:11;36843:18;36863:9;36799:13;:74::i;:::-;36226:658;36125:759;37146:49;;37187:5;;37168:6;;37146:49;;37187:5;;37146:49;35389:1813;;;35295:1907;;;:::o;10561:295:93:-;10795:6;10820:29;;-1:-1:-1;;;10820:29:93;;;;;;;;;;;13399:146:86;13479:7;13526:10;13515:22;;;;;;;;:::i;14240:3748::-;14438:14;-1:-1:-1;;;;;14513:3:86;:10;;14524:29;;;;:12;:29;:::i;:::-;14513:67;;-1:-1:-1;;;;;;14513:67:86;;;;;;;-1:-1:-1;;;;;15345:32:119;;;14513:67:86;;;15327:51:119;422:30:76;15394:18:119;;;15387:34;15300:18;;14513:67:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14508:198;;14632:29;;;;:12;:29;:::i;:::-;14603:92;;-1:-1:-1;;;14603:92:86;;-1:-1:-1;;;;;15345:32:119;;;14603:92:86;;;15327:51:119;422:30:76;15394:18:119;;;15387:34;15300:18;;14603:92:86;15153:274:119;14508:198:86;14754:22;;;;;;;;:::i;:::-;14750:107;;;14829:16;14792:54;;-1:-1:-1;;;14792:54:86;;14817:10;14792:54;;;15327:51:119;14829:16:86;;;;15394:18:119;;;15387:34;14792:12:86;-1:-1:-1;;;;;14792:24:86;;;;15300:18:119;;14792:54:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14750:107;14939:28;;:33;14935:190;;15014:28;;14988:17;15008:35;;;;;;;;;;15079:11;;;15092:21;;;15057:57;;15079:11;;;-1:-1:-1;;;15092:21:86;;;;15057;:57::i;:::-;14974:151;14935:190;15182:20;;15252:29;;;;:12;:29;:::i;:::-;-1:-1:-1;;;;;15230:80:86;;15339:10;15386:28;;15446:25;;;;:12;:25;:::i;:::-;15513:35;;;;:12;:35;:::i;:::-;15577:12;:22;;;;;;;;:::i;:::-;15230:384;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15697:16;;15181:433;;-1:-1:-1;15697:16:86;-1:-1:-1;;;;;;15683:30:86;:10;:30;;;;:91;;;15745:29;15763:10;15745:17;:29::i;:::-;15717:9;:24;;;:57;;15683:91;15679:230;;;15830:9;:24;;;15866:29;15884:10;15866:17;:29::i;:::-;15797:101;;-1:-1:-1;;;15797:101:86;;;;;28913:25:119;;;;28954:18;;;28947:34;28886:18;;15797:101:86;28739:248:119;15679:230:86;1776:10;15962:38;;:9;:18;;;:38;;;15958:150;;;16050:18;;;;;16023:74;;-1:-1:-1;;;16023:74:86;;29174:10:119;29211:15;;;16023:74:86;;;29193:34:119;1776:10:86;29243:18:119;;;29236:43;29137:18;;16023:74:86;28992:293:119;15958:150:86;1843:4;16169:57;;:9;:29;;;:57;;;16165:195;;;16283:29;;;;16249:100;;-1:-1:-1;;;16249:100:86;;18274:12:119;18313:15;;;16249:100:86;;;18295:34:119;1843:4:86;18345:18:119;;;18338:43;18237:18;;16249:100:86;18094:293:119;16165:195:86;16374:28;;;:33;16370:345;;16480:34;16497:9;:16;;;16480;:34::i;:::-;16528:38;16545:9;:20;;;16528:16;:38::i;:::-;16370:345;;;16639:65;16664:28;;16694:9;16639:24;:65::i;:::-;16763:220;16803:12;16847:29;;;;:12;:29;:::i;:::-;16901:9;16936:10;16967:5;;16763:11;:220::i;:::-;16754:229;-1:-1:-1;17070:1:86;17039:21;;;;:10;:21;:::i;:::-;:28;;:32;17035:238;;;17087:20;17121:21;;;;:10;:21;:::i;:::-;17110:43;;;;;;;:::i;:::-;17087:66;;17167:63;17180:10;17192:9;:16;;;:29;;;17223:6;17167:12;:63::i;:::-;17244:18;17255:6;17244:10;:18::i;:::-;17073:200;17035:238;17314:28;;;:33;17310:672;;17430:37;17445:9;17456:10;17430:14;:37::i;:::-;17310:672;;;17541:47;17559:28;;17541:17;:47::i;:::-;17690:179;17748:28;;17805:9;17844:10;17690:20;:179::i;:::-;17889:82;;17962:6;;17914:28;;;17889:82;;17914:28;;17889:82;17310:672;14454:3534;;14240:3748;;;;;;;:::o;9667:366:93:-;9868:6;-1:-1:-1;;;;;9890:25:93;;9910:4;9890:25;9886:79;;9936:29;;-1:-1:-1;;;9936:29:93;;;;;;;;;;;9886:79;-1:-1:-1;;;;9667:366:93;;;;;;;;:::o;48709:899:86:-;48795:7;48834:14;;;;;;;;;;48863:11;;;;:16;;48859:51;;-1:-1:-1;48908:1:86;;48709:899;-1:-1:-1;;48709:899:86:o;48859:51::-;49450:23;49465:7;49450:14;:23::i;:::-;49487:21;;;;49522:24;;;;49560:30;;;;49426:174;;;29843:4:119;29831:17;;;;49426:174:86;;;29813:36:119;49487:21:86;-1:-1:-1;;;49487:21:86;;;;;29896:18:119;;;29889:43;29948:18;;;29941:34;;;;-1:-1:-1;;;49560:30:86;;;29991:18:119;;;29984:43;29785:19;;49426:174:86;;;;;;;;;;;;49416:185;;;;;;49409:192;;;48709:899;;;:::o;1541:1696:85:-;1677:4;-1:-1:-1;;;;;1759:18:85;;;:22;1755:1476;;1798:12;1812:19;1835:6;-1:-1:-1;;;;;1835:17:85;1893:34;;;1929:4;1935:9;1870:75;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1870:75:85;;;;;;;;;;;;;;-1:-1:-1;;;;;1870:75:85;-1:-1:-1;;;;;;1870:75:85;;;;;;;;;;1835:124;;;;1870:75;1835:124;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1797:162;;;;1996:7;:46;;;;;2023:6;:13;2040:2;2023:19;1996:46;:142;;;;-1:-1:-1;2062:29:85;;-1:-1:-1;;;2103:34:85;2062:29;;;;;;;;;;;;:::i;:::-;:76;1996:142;1973:165;;;;;;1755:1476;2226:9;2249;2272:7;2348:9;:16;2368:2;2348:22;2344:817;;-1:-1:-1;;;2447:4:85;2432:20;;2426:27;2500:4;2485:20;;2479:27;2561:4;2546:20;;2540:27;2537:1;2532:36;2344:817;;;2686:9;:16;2706:2;2686:22;2682:479;;2814:4;2799:20;;2793:27;2868:4;2853:20;;2847:27;2793;;-1:-1:-1;;;;;;2914:80:85;;;-1:-1:-1;3022:25:85;3038:3;3023:18;;;3045:2;3022:25;:::i;:::-;3012:36;;2710:353;2682:479;;;3127:9;:16;3094:52;;-1:-1:-1;;;3094:52:85;;;;;;4445:25:119;;4433:2;4418:18;;4299:177;2682:479:85;3192:28;3206:4;3212:1;3215;3218;3192:13;:28::i;:::-;-1:-1:-1;;;;;3182:38:85;:6;-1:-1:-1;;;;;3182:38:85;;3175:45;;;;;1541:1696;;;;;:::o;2528:160:0:-;2604:12;;:::i;:::-;-1:-1:-1;2635:46:0;;;;;;;;-1:-1:-1;2635:46:0;;;-1:-1:-1;;;;;2635:46:0;;;;;;;;;;;;;;;;;;;;2528:160::o;47711:341:86:-;47796:19;47809:5;47796:12;:19::i;:::-;47791:255;;47895:14;;47889:21;;;;;;;;:::i;:::-;47934:18;;;;47974:8;;;;;48008:12;;;;47838:197;;-1:-1:-1;;;47838:197:86;;31200:4:119;31188:17;;;47838:197:86;;;31170:36:119;-1:-1:-1;;;;;31242:32:119;;;31222:18;;;31215:60;31291:18;;;31284:34;;;;31334:18;;;31327:34;31142:19;;47838:197:86;30943:424:119;47791:255:86;47711:341;:::o;18218:457::-;18328:12;;-1:-1:-1;;;;;18328:26:86;;18324:345;;18390:6;-1:-1:-1;;;;;18374:22:86;:6;:12;;;-1:-1:-1;;;;;18374:22:86;;18370:131;;18453:12;;;;18423:63;;-1:-1:-1;;;18423:63:86;;-1:-1:-1;;;;;17433:15:119;;;18423:63:86;;;17415:34:119;17485:15;;;17465:18;;;17458:43;17350:18;;18423:63:86;17203:304:119;18370:131:86;18534:13;-1:-1:-1;;;;;18518:29:86;:6;:12;;;-1:-1:-1;;;;;18518:29:86;;18514:145;;18604:12;;18574:70;;-1:-1:-1;;;18574:70:86;;-1:-1:-1;;;;;17433:15:119;;;18574:70:86;;;17415:34:119;17485:15;;;17465:18;;;17458:43;17350:18;;18574:70:86;17203:304:119;18514:145:86;18218:457;;;:::o;7602:536:93:-;7667:12;;-1:-1:-1;;;;;7667:26:93;;7663:469;;7726:12;;7772;;;;7849:13;;;;;7890:15;;;;7926:8;;;;7955;;;;7984;;;;7713:294;;-1:-1:-1;;;7713:294:93;;-1:-1:-1;;;;;31739:15:119;;;7713:294:93;;;31721:34:119;7819:4:93;31771:18:119;;;31764:43;31823:18;;;31816:34;;;;31866:18;;;31859:34;;;;31942:4;31930:17;31909:19;;;31902:46;31964:19;;;31957:35;32008:19;;;32001:35;;;;7713:33:93;;;;;31655:19:119;;7713:294:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7709:413;;;7602:536;:::o;4472:350::-;4578:23;4604:28;:5;4620:11;4604:15;:28::i;:::-;4578:54;-1:-1:-1;4643:48:93;:5;4671:6;4679:11;4643:27;:48::i;:::-;4701:57;4716:5;4723:15;4740:11;4753:4;4701:14;:57::i;:::-;4803:11;-1:-1:-1;;;;;4774:41:93;4795:6;-1:-1:-1;;;;;4774:41:93;;4788:5;4774:41;;;;;;:::i;:::-;;;;;;;;4568:254;4472:350;;;:::o;37427:600:86:-;37522:17;37542:13;;;;;;;;;;;37650:9;:108;;37704:54;37729:28;37750:6;37729:20;:28::i;:::-;37704:18;;;;;-1:-1:-1;;;;;37704:18:86;;:24;:54::i;:::-;37650:108;;;;;;;;;;;;37674:15;;;37650:108;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;37650:108:86;;;;;;;;;;;;;;;;;;;;;;;;37618:140;;37844:19;37856:6;37844:11;:19::i;:::-;37879:53;;;;;;37901:6;;37879:53;;;;;37997:23;38003:5;38010:9;37997:5;:23::i;32371:249::-;32439:7;32478:13;;;;;;;;;;32587:26;32478:13;32587:20;:26::i;:::-;32564:4;:20;;;:49;;;;:::i;46660:216::-;46722:5;46759:13;;;;;;;;;;46790:11;;;;46805:1;46790:16;:60;;;;-1:-1:-1;46810:21:86;;;;46835:15;-1:-1:-1;;;46810:21:86;;;;;:40;;46790:60;46789:80;;46858:11;;;;46789:80;;;46854:1;46782:87;46660:216;-1:-1:-1;;;46660:216:86:o;30363:474::-;30536:6;:11;;30546:1;30536:11;30532:53;;30568:17;;-1:-1:-1;;;30568:17:86;;;;;;;;;;;30532:53;30637:6;:11;;30647:1;30637:11;30633:52;;30669:16;;-1:-1:-1;;;30669:16:86;;;;;;;;;;;30633:52;30763:15;30743:16;:35;;;30739:91;;30799:31;;-1:-1:-1;;;30799:31:86;;12412:12:119;12400:25;;30799:31:86;;;12382:44:119;12355:18;;30799:31:86;12238:194:119;30959:598:86;31020:17;31040:13;;;;;;;;;;31156:15;;-1:-1:-1;;31156:15:86;31170:1;31156:15;;;31251:26;31040:13;31251:20;:26::i;:::-;31224:24;;;:53;31287:30;;;:34;;-1:-1:-1;;;;31287:34:86;;;31518:32;;31541:6;;31518:32;;31320:1;;31518:32;31010:547;30959:598;:::o;3043:310:93:-;3124:23;3150:30;:5;3174:4;3150:15;:30::i;:::-;3124:56;-1:-1:-1;3191:46:93;:5;3215:6;3231:4;3191:23;:46::i;:::-;3247:59;3262:5;3269:15;3294:4;3301;3247:14;:59::i;:::-;3339:6;-1:-1:-1;;;;;3322:24:93;;3332:5;3322:24;;;;;;:::i;:::-;;;;;;;;3114:239;3043:310;;:::o;3724:325::-;3810:23;3836:28;:5;3852:11;3836:15;:28::i;:::-;3810:54;-1:-1:-1;3875:55:93;:5;3911:4;3918:11;3875:27;:55::i;:::-;3940:57;3955:5;3962:15;3979:11;3992:4;3940:14;:57::i;:::-;4030:11;-1:-1:-1;;;;;4013:29:93;;4023:5;4013:29;;;;;;:::i;17056:182:0:-;17154:4;17177:31;17192:5;17199:8;17177:14;:31::i;:::-;:54;;;;;17212:19;17225:5;17212:12;:19::i;38159:114:86:-;38214:22;;-1:-1:-1;;;38214:22:86;;;;;4445:25:119;;;38214:9:86;-1:-1:-1;;;;;38214:14:86;;;;4418:18:119;;38214:22:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38253:5:86;:13;;;-1:-1:-1;38253:13:86;;;;;;;38246:20;;-1:-1:-1;;;;;;38246:20:86;;;;;;;;;;-1:-1:-1;;;;;;38246:20:86;;;;;;;;-1:-1:-1;;;;;;38246:20:86;;;;;;;;-1:-1:-1;;;;;;38246:20:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38159:114::o;6167:551:93:-;6295:23;6321:30;:5;6345:4;6321:15;:30::i;:::-;6295:56;-1:-1:-1;6362:60:93;:5;6394:4;6409:11;6362:23;:60::i;:::-;6464:18;;;;6484:12;;;;6432:65;;-1:-1:-1;;;6432:65:93;;-1:-1:-1;;;;;32576:15:119;;;6432:65:93;;;32558:34:119;32628:15;;;32608:18;;;32601:43;32680:15;;;32660:18;;;32653:43;32712:18;;;32705:34;;;;6432:18:93;;;;;;32492:19:119;;6432:65:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6507:60;6522:5;6529:15;6554:4;6561:5;6507:14;:60::i;:::-;6705:5;-1:-1:-1;;;;;6659:52:93;6699:4;-1:-1:-1;;;;;6659:52:93;6685:11;-1:-1:-1;;;;;6659:52:93;;6670:5;6659:52;;;;;;:::i;:::-;;;;;;;;6285:433;6167:551;;;;:::o;18943:1230:86:-;19040:17;19060:13;;;;;;;;;;;19345:16;;;;:29;;;;19323:18;;;;;-1:-1:-1;;;;;19323:18:86;;;:51;;;;;:95;;-1:-1:-1;19390:16:86;;;;:23;;;:28;19323:95;19306:155;;;19436:25;;-1:-1:-1;;;19436:25:86;;;;;;;;;;;19306:155;19587:20;;;;:29;19559:57;;;;;;;;:::i;:::-;:15;;;:24;;;:57;;;;;;;;:::i;:::-;;;:138;;;-1:-1:-1;19664:20:86;;;;:33;;;19632:15;;;:28;;;;-1:-1:-1;;;;;19632:28:86;;;:65;;;;19559:138;:199;;;-1:-1:-1;19735:20:86;;;;:23;;;19713:18;;;;:45;;19559:199;:268;;;-1:-1:-1;19800:20:86;;;;;:27;;19774:22;;;;:53;;19559:268;19542:332;;;19845:29;;-1:-1:-1;;;19845:29:86;;;;;;;;;;;19542:332;19977:18;;;;19960:13;;;;-1:-1:-1;;;;;19960:13:86;;;:35;;;19956:211;;20079:13;;;;20123:18;;;;20018:138;;-1:-1:-1;;;20018:138:86;;-1:-1:-1;;;;;20079:13:86;;;20018:138;;;17415:34:119;17485:15;;17465:18;;;17458:43;17350:18;;20018:138:86;17203:304:119;20590:1391:86;20888:16;;20873:32;;-1:-1:-1;;;20873:32:86;;-1:-1:-1;;;;;2073:32:119;;;20873::86;;;2055:51:119;20800:14:86;;20873:9;:14;;;;2028:18:119;;20873:32:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20957:17;20977:13;;;;;;;;;;;21000:15;;21046:16;;;;:29;;;-1:-1:-1;;;;;21025:50:86;21000:15;21025:50;-1:-1:-1;;;;;;21025:50:86;;;;21014:1;21025:50;;;20864:41;;-1:-1:-1;21114:24:86;;;;:10;:24;:::i;:::-;21085:26;;;:53;;21148:45;21177:15;21148:45;;;-1:-1:-1;;;21148:45:86;-1:-1:-1;;;;;;21148:45:86;;;-1:-1:-1;;;;;21085:53:86;;;;21148:45;;;;;;;21253:18;;;;21227:44;;;;;;;;:::i;:::-;21203:21;;;:68;;;;;;-1:-1:-1;;;21203:68:86;-1:-1:-1;;;;21203:68:86;;;;;;21297:18;;;;21281:13;;;:34;;-1:-1:-1;;;;;21281:34:86;;;-1:-1:-1;;;;;;21281:34:86;;;;;;;21347:16;;21325:19;;;:38;;;;;;;;;;;21449:29;;;;21406:151;;21424:132;;;2054:3;2123;21424:11;:132::i;:::-;21406:17;:151::i;:::-;21373:30;;;;:184;;;;;;;-1:-1:-1;;;21373:184:86;-1:-1:-1;;;;21373:184:86;;;;;;;;;;21594:29;;;;21567:24;;;:56;21656:16;;;;:23;;;;;21633:20;;;:46;21707:20;;;21689:38;;:15;;;:38;;21707:20;;21689:15;;;;-1:-1:-1;;21689:38:86;;;;-1:-1:-1;;21689:38:86;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21689:38:86;;;;;-1:-1:-1;;;;;21689:38:86;;;;;;;;;;;;;;;;;;;;;;;;;21855:16;-1:-1:-1;;;;;21743:231:86;21811:12;21777:6;21743:231;21892:9;21927:10;21958:5;;21743:231;;;;;;;;;:::i;:::-;;;;;;;;20816:1165;20590:1391;;;;;;;;:::o;22211:1145::-;22371:47;22377:9;:20;;;22399:9;:18;;;22371:5;:47::i;:::-;22506:16;;-1:-1:-1;;;;;22478:44:86;:24;;;;:10;:24;:::i;:::-;-1:-1:-1;;;;;22478:44:86;;22474:196;;22595:64;22619:9;:16;;;22637:9;22648:10;22595:23;:64::i;:::-;22733:17;22752:21;22789:74;22825:6;-1:-1:-1;;;;;22825:10:86;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22839:9;:16;;;:23;;;22789:35;:74::i;:::-;22990:16;;;;22732:131;;-1:-1:-1;22732:131:86;-1:-1:-1;23045:13:86;;23041:153;;23096:9;23074:12;:19;;:31;;;;;23119:64;23129:12;23143:9;:16;;;23161:6;-1:-1:-1;;;;;23161:19:86;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23119:9;:64::i;:::-;23243:19;;;:35;;;23312:16;;23330:18;;;;23288:61;;23243:12;;23288:9;:61::i;23936:3203::-;24097:17;24117:24;;;;;;;;;;;24171:36;;-1:-1:-1;;;24171:36:86;;;;;4445:25:119;;;24117:24:86;;24097:17;24171:9;-1:-1:-1;;;;;24171:17:86;;;;4418:18:119;;24171:36:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24151:56;;24217:23;24243:39;24264:17;24243:20;:39::i;:::-;24217:65;;24346:17;24365:21;24402:74;24438:6;-1:-1:-1;;;;;24438:10:86;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24452:9;:16;;;:23;;;24402:35;:74::i;:::-;24345:131;;;;24487:14;24504:40;24513:15;24530:13;24504:8;:40::i;:::-;24487:57;;24554:15;24588;24572:13;:31;:69;;24640:1;24572:69;;;24606:31;24622:15;24606:13;:31;:::i;:::-;24554:87;;24651:16;24680:1;24670:7;:11;:49;;24688:31;24706:13;24688:15;:31;:::i;:::-;24670:49;;;24684:1;24670:49;24651:68;;25038:25;25098:9;-1:-1:-1;;;;;25078:29:86;:9;:16;;;-1:-1:-1;;;;;25078:29:86;;;:137;;;-1:-1:-1;25124:19:86;;;;-1:-1:-1;;;;;25124:32:86;;;:19;;:32;:90;;;;-1:-1:-1;25190:24:86;;;;:10;:24;:::i;:::-;25160:26;;;;-1:-1:-1;;;;;25160:26:86;;;:54;;;;25124:90;25342:16;;;;25446;;25038:177;;-1:-1:-1;25342:16:86;-1:-1:-1;;;;;25418:44:86;:24;;;;:10;:24;:::i;:::-;-1:-1:-1;;;;;25418:44:86;;25414:285;;25607:7;25570:20;:33;;25602:1;25570:33;;;25593:6;25570:33;25557:47;;:9;:47;:::i;:::-;:57;;;;:::i;:::-;25535:19;;;:79;25628:60;25535:12;25666:9;25677:10;25628:23;:60::i;:::-;25737:13;;25733:153;;25788:9;25766:12;:19;;:31;;;;;25811:64;25821:12;25835:9;:16;;;25853:6;-1:-1:-1;;;;;25853:19:86;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25811:64;25960:20;25956:130;;;25996:19;;;:28;;;26058:16;;26038:37;;25996:12;;26038:5;:37::i;:::-;26146:11;;26142:459;;26262:19;;;:29;;;26329:16;;26347:18;;;;26305:61;;26262:12;;26305:9;:61::i;:::-;26142:459;;;26387:12;;26383:218;;26507:19;;;:30;;;26571:18;;;;26551:39;;26507:12;;26551:5;:39::i;:::-;26648:4;:23;26694:17;26777:8;26740:20;:33;;26772:1;26740:33;;;26763:6;26740:33;26739:46;;;;:::i;:::-;26648:182;;-1:-1:-1;;;;;;26648:182:86;;;;;;;;;;21968:25:119;;;;22009:18;;;22002:34;-1:-1:-1;;;;;22072:32:119;;22052:18;;;22045:60;21941:18;;26648:182:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26644:489;24087:3052;;;;;;;;;;23936:3203;;;:::o;6598:232:59:-;6683:7;6703:17;6722:18;6744:25;6755:4;6761:1;6764;6767;6744:10;:25::i;:::-;6702:67;;;;6779:18;6791:5;6779:11;:18::i;:::-;-1:-1:-1;6814:9:59;-1:-1:-1;6598:232:59;;;;;;;:::o;14234:722:0:-;14312:7;;14335:14;;:32;;;;;;;;:::i;:::-;;14331:619;;14397:18;;;;14390:44;;-1:-1:-1;;;14390:44:0;;-1:-1:-1;;;;;2073:32:119;;;14390:44:0;;;2055:51:119;14390:36:0;;;;;;2028:18:119;;14390:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14383:51;;;;14331:619;14474:15;14456:14;;:33;;;;;;;;:::i;:::-;;14452:498;;14561:6;-1:-1:-1;;;;;14512:55:0;14520:5;:18;;;-1:-1:-1;;;;;14512:35:0;;14548:5;:8;;;14512:45;;;;;;;;;;;;;4445:25:119;;4433:2;4418:18;;4299:177;14512:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14512:55:0;;:63;;14574:1;14512:63;;;14570:1;14512:63;14505:70;;;;;;14452:498;14615:16;14597:14;;:34;;;;;;;;:::i;:::-;;14593:357;;14663:18;;;;14701:8;;;;;14654:56;;-1:-1:-1;;;14654:56:0;;-1:-1:-1;;;;;15345:32:119;;;14654:56:0;;;15327:51:119;15394:18;;;15387:34;;;;14654:38:0;;;;;15300:18:119;;14654:56:0;15153:274:119;14593:357:0;14750:22;14732:14;;:40;;;;;;;;:::i;:::-;;14728:222;;14851:6;-1:-1:-1;;;;;14795:62:0;14810:5;:18;;;-1:-1:-1;;;;;14795:42:0;;14838:5;:8;;;14795:52;;;;;;;;;;;;;4445:25:119;;4433:2;4418:18;;4299:177;14728:222:0;14897:42;;-1:-1:-1;;;14897:42:0;;34931:2:119;14897:42:0;;;34913:21:119;;;34950:18;;;34943:30;35009:34;34989:18;;;34982:62;35061:18;;14897:42:0;34729:356:119;5621:152:0;5721:45;5740:5;5747:6;5755:4;5761;5721:18;:45::i;6724:483:93:-;6918:23;6944:22;:138;;7057:25;:5;:23;:25::i;:::-;7039:43;;:15;:43;:::i;:::-;6944:138;;;6999:25;:5;:23;:25::i;:::-;6981:43;;:15;:43;:::i;:::-;6918:164;-1:-1:-1;7116:31:93;:5;7132:14;7116:15;:31::i;:::-;7097:15;:50;7093:108;;7170:20;;-1:-1:-1;;;7170:20:93;;;;;;;;;;;32771:488:86;32865:30;;;;32842:7;;-1:-1:-1;;;32865:30:86;;;;:35;;32861:84;;-1:-1:-1;32921:24:86;;;;32771:488::o;32861:84::-;32998:19;;;;32956:20;;33021:6;;32980:37;;-1:-1:-1;;;32998:19:86;;;;32980:15;:37;:::i;:::-;32979:48;;;;:::i;:::-;33088:20;;;;33110:30;;;;32956:71;;-1:-1:-1;33037:23:86;;33063:130;;33088:20;33110:45;;32956:71;;-1:-1:-1;;;33110:30:86;;;;:45;:::i;:::-;1985:4;33063:11;:130::i;:::-;33037:156;;33237:15;33210:4;:24;;;:42;;;;:::i;5063:149:0:-;5159:46;5178:5;5185:6;5193:4;5199:5;5159:18;:46::i;18412:428::-;18653:18;;;;18620:52;;-1:-1:-1;;;18620:52:0;;-1:-1:-1;;;;;2073:32:119;;;18620:52:0;;;2055:51:119;18517:4:0;;;;18620:32;;;;;;2028:18:119;;18620:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18598:74;-1:-1:-1;1279:15:0;18686:40;;;;18682:103;;18753:14;;18747:38;;;;:21;;;;;;;;:::i;:::-;:38;;;18740:45;;;;;18682:103;18803:30;18827:5;18803:23;:30::i;21588:735::-;21653:4;;21673:14;;:32;;;;;;;;:::i;:::-;;21669:626;;21763:8;;;;:13;21759:31;;-1:-1:-1;21785:5:0;;21588:735;-1:-1:-1;21588:735:0:o;21759:31::-;21669:626;;;21830:15;21812:14;;:33;;;;;;;;:::i;:::-;;21808:487;;21908:12;;;;:17;21904:35;;-1:-1:-1;21934:5:0;;21588:735;-1:-1:-1;21588:735:0:o;21808:487::-;21979:16;21961:14;;:34;;;;;;;;:::i;:::-;21957:338;;;22080:22;22062:14;;:40;;;;;;;;:::i;:::-;;22058:237;;22172:12;;;;:17;22168:35;;-1:-1:-1;22198:5:0;;21588:735;-1:-1:-1;21588:735:0:o;22058:237::-;22268:14;;22262:21;;;;;;;;:::i;:::-;22242:42;;-1:-1:-1;;;22242:42:0;;36041:4:119;36029:17;;;22242:42:0;;;36011:36:119;35984:18;;22242:42:0;35869:184:119;22058:237:0;-1:-1:-1;22312:4:0;;21588:735;-1:-1:-1;21588:735:0:o;1667:4213:64:-;1749:14;;;-1:-1:-1;;2286:1:64;2283;2276:20;2329:1;2326;2322:9;2313:18;;2384:5;2380:2;2377:13;2369:5;2365:2;2361:14;2357:34;2348:43;;;2486:5;2495:1;2486:10;2482:368;;2824:11;2816:5;:19;;;;;:::i;:::-;;2809:26;;;;;;2482:368;2974:5;2960:11;:19;2952:53;;;;-1:-1:-1;;;2952:53:64;;36260:2:119;2952:53:64;;;36242:21:119;36299:2;36279:18;;;36272:30;-1:-1:-1;;;36318:18:119;;;36311:51;36379:18;;2952:53:64;36058:345:119;2952:53:64;3261:17;3396:11;3393:1;3390;3383:25;4774:1;3944;3929:12;;:16;;3914:32;;4049:22;;;;4755:1;:15;;4754:21;;5007;;;5003:25;;4992:36;5076:21;;;5072:25;;5061:36;5146:21;;;5142:25;;5131:36;5216:21;;;5212:25;;5201:36;5286:21;;;5282:25;;5271:36;5357:21;;;5353:25;;;5342:36;;;3899:12;4294;;;4290:23;;;4286:31;;;3510:20;;;3499:32;;;4406:12;;;;3557:21;;4147:16;;;;4397:21;;;;5821:15;;;-1:-1:-1;;;;1667:4213:64:o;14752:187:65:-;14808:6;14843:16;14834:25;;;14826:76;;;;-1:-1:-1;;;14826:76:65;;36610:2:119;14826:76:65;;;36592:21:119;36649:2;36629:18;;;36622:30;36688:34;36668:18;;;36661:62;-1:-1:-1;;;36739:18:119;;;36732:36;36785:19;;14826:76:65;36408:402:119;14826:76:65;-1:-1:-1;14926:5:65;14752:187::o;27461:536:86:-;27630:24;-1:-1:-1;;;;;27657:6:86;:21;;27679:24;;;;:10;:24;:::i;:::-;27657:47;;-1:-1:-1;;;;;;27657:47:86;;;;;;;-1:-1:-1;;;;;2073:32:119;;;27657:47:86;;;2055:51:119;2028:18;;27657:47:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27630:74;-1:-1:-1;;;;;;27718:34:86;;27714:137;;27813:24;;;;:10;:24;:::i;:::-;27775:65;;-1:-1:-1;;;27775:65:86;;-1:-1:-1;;;;;2073:32:119;;;27775:65:86;;;2055:51:119;2028:18;;27775:65:86;1892:220:119;27714:137:86;27865:13;;;;:17;27861:130;;27898:82;27916:6;27924:11;27937:24;;;;:10;:24;:::i;:::-;27963:16;;27898:17;:82::i;:::-;27620:377;27461:536;;;:::o;671:294:84:-;754:17;773:21;810:3;:8;;817:1;810:8;806:48;;-1:-1:-1;840:1:84;;-1:-1:-1;843:10:84;832:22;;806:48;877:33;889:10;901:3;877:33;;906:3;877:11;:33::i;:::-;865:45;-1:-1:-1;936:22:84;865:45;936:10;:22;:::i;:::-;920:38;;671:294;;;;;;:::o;588:104:64:-;646:7;676:1;672;:5;:13;;684:1;672:13;;;-1:-1:-1;680:1:64;;588:104;-1:-1:-1;588:104:64:o;5009:1456:59:-;5097:7;;6021:66;6008:79;;6004:161;;;-1:-1:-1;6119:1:59;;-1:-1:-1;6123:30:59;6103:51;;6004:161;6276:24;;;6259:14;6276:24;;;;;;;;;37042:25:119;;;37115:4;37103:17;;37083:18;;;37076:45;;;;37137:18;;;37130:34;;;37180:18;;;37173:34;;;6276:24:59;;37014:19:119;;6276:24:59;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6276:24:59;;-1:-1:-1;;6276:24:59;;;-1:-1:-1;;;;;;;6314:20:59;;6310:101;;6366:1;6370:29;6350:50;;;;;;;6310:101;6429:6;-1:-1:-1;6437:20:59;;-1:-1:-1;5009:1456:59;;;;;;;;:::o;570:511::-;647:20;638:5;:29;;;;;;;;:::i;:::-;;634:441;;570:511;:::o;634:441::-;743:29;734:5;:38;;;;;;;;:::i;:::-;;730:345;;788:34;;-1:-1:-1;;;788:34:59;;37420:2:119;788:34:59;;;37402:21:119;37459:2;37439:18;;;37432:30;37498:26;37478:18;;;37471:54;37542:18;;788:34:59;37218:348:119;730:345:59;852:35;843:5;:44;;;;;;;;:::i;:::-;;839:236;;903:41;;-1:-1:-1;;;903:41:59;;37773:2:119;903:41:59;;;37755:21:119;37812:2;37792:18;;;37785:30;37851:33;37831:18;;;37824:61;37902:18;;903:41:59;37571:355:119;839:236:59;974:30;965:5;:39;;;;;;;;:::i;:::-;;961:114;;1020:44;;-1:-1:-1;;;1020:44:59;;38133:2:119;1020:44:59;;;38115:21:119;38172:2;38152:18;;;38145:30;38211:34;38191:18;;;38184:62;-1:-1:-1;;;38262:18:119;;;38255:32;38304:19;;1020:44:59;37931:398:119;5779:1204:0;5910:14;5892;;:32;;;;;;;;:::i;:::-;;5888:1089;;5962:4;-1:-1:-1;;;;;5944:23:0;;;5940:210;;5985:59;6025:4;6031:5;:12;;;5992:5;:18;;;-1:-1:-1;;;;;5985:39:0;;;:59;;;;;:::i;:::-;5888:1089;;5940:210;6079:71;6123:6;6131:4;6137:5;:12;;;6086:5;:18;;;-1:-1:-1;;;;;6079:43:0;;;:71;;;;;;:::i;5888:1089::-;6190:15;6172:14;;:33;;;;;;;;:::i;:::-;;6168:809;;6226:6;6221:200;;6258:18;;;;6305:8;;;;;6250:64;;-1:-1:-1;;;6250:64:0;;-1:-1:-1;;;;;38592:15:119;;;6250:64:0;;;38574:34:119;38644:15;;;38624:18;;;38617:43;38676:18;;;38669:34;;;;6250:40:0;;;;;38509:18:119;;6250:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6168:809;;6221:200;6357:18;;;;6408:8;;;;;6349:72;;-1:-1:-1;;;6349:72:0;;-1:-1:-1;;;;;39037:15:119;;;6349:72:0;;;39019:34:119;39089:15;;;39069:18;;;39062:43;39121:18;;;39114:34;;;;39184:3;39164:18;;;39157:31;-1:-1:-1;39204:19:119;;;39197:30;6349:44:0;;;;;39244:19:119;;6349:72:0;38714:555:119;6168:809:0;6461:16;6443:14;;:34;;;;;;;;:::i;:::-;;6439:538;;6502:5;:18;;;-1:-1:-1;;;;;6493:45:0;;6539:6;6547:4;6553:5;:8;;;6563:5;:12;;;6579:1;6563:17;:36;;6587:5;:12;;;6563:36;;;6583:1;6563:36;6493:111;;-1:-1:-1;;;;;;6493:111:0;;;;;;;-1:-1:-1;;;;;39625:15:119;;;6493:111:0;;;39607:34:119;39677:15;;;;39657:18;;;39650:43;39709:18;;;39702:34;39752:18;;;39745:34;39587:3;39795:19;;;39788:32;-1:-1:-1;39836:19:119;;;39829:30;39876:19;;6493:111:0;39274:627:119;6439:538:0;6644:22;6626:14;;:40;;;;;;;;:::i;:::-;;6622:355;;6704:4;-1:-1:-1;;;;;6686:23:0;;;6682:210;;6742:18;;;;6777:8;;;;;6727:59;;-1:-1:-1;;;6727:59:0;;-1:-1:-1;;;;;15345:32:119;;;6727:59:0;;;15327:51:119;15394:18;;;15387:34;;;;6727:43:0;;;;;15300:18:119;;6727:59:0;15153:274:119;6682:210:0;6836:18;;;;6883:8;;;;;6821:71;;-1:-1:-1;;;6821:71:0;;-1:-1:-1;;;;;38592:15:119;;;6821:71:0;;;38574:34:119;38644:15;;;38624:18;;;38617:43;38676:18;;;38669:34;;;;6821:47:0;;;;;38509:18:119;;6821:71:0;38334:375:119;7464:382:0;7534:7;;7557:14;;:32;;;;;;;;:::i;:::-;;7553:286;;-1:-1:-1;7610:12:0;;;;7464:382::o;7553:286::-;7659:16;7641:14;;:34;;;;;;;;:::i;:::-;;:54;;;;;7694:1;7679:5;:12;;;:16;7641:54;7637:202;;;-1:-1:-1;7716:12:0;;;;7464:382::o;7637:202::-;7464:382;;;:::o;19165:2052::-;19241:4;;19261:14;;:32;;;;;;;;:::i;:::-;;19257:1954;;19369:35;:5;:18;;;-1:-1:-1;;;;;19369:33:0;;:35::i;:::-;19365:1208;;;19549:18;;;;:71;;-1:-1:-1;;;;;19549:51:0;-1:-1:-1;;;19549:51:0;:71::i;:::-;19545:108;;;-1:-1:-1;19649:4:0;;19165:2052;-1:-1:-1;19165:2052:0:o;19545:108::-;19825:18;;;;:72;;-1:-1:-1;;;;;19825:51:0;-1:-1:-1;;;19825:51:0;:72::i;:::-;:81;;;:187;;-1:-1:-1;19930:18:0;;;;:73;;-1:-1:-1;;;;;19930:51:0;-1:-1:-1;;;19930:51:0;:73::i;:::-;:82;19825:187;:300;;;;-1:-1:-1;20036:18:0;;;;:80;;-1:-1:-1;;;;;20036:51:0;-1:-1:-1;;;20036:51:0;:80::i;:::-;:89;19798:327;19165:2052;-1:-1:-1;;19165:2052:0:o;19365:1208::-;-1:-1:-1;20524:18:0;;;-1:-1:-1;;;;;20524:30:0;;:34;;;19165:2052::o;19257:1954::-;20612:15;20594:14;;:33;;;;;;;;:::i;:::-;;20590:621;;20689:18;;;;:57;;-1:-1:-1;;;;;20689:36:0;-1:-1:-1;;;20689:36:0;:57::i;20590:621::-;20786:16;20768:14;;:34;;;;;;;;:::i;:::-;;20764:447;;20865:18;;;;:58;;-1:-1:-1;;;;;20865:36:0;-1:-1:-1;;;20865:36:0;:58::i;20764:447::-;20963:22;20945:14;;:40;;;;;;;;:::i;:::-;;20941:270;;21054:18;;;;:65;;-1:-1:-1;;;;;21054:36:0;-1:-1:-1;;;21054:36:0;:65::i;5260:396:93:-;5392:23;5418:22;:5;5434;5418:15;:22::i;:::-;5485:18;;;;5505:12;;;;5451:67;;-1:-1:-1;;;5451:67:93;;-1:-1:-1;;;;;32576:15:119;;;5451:67:93;;;32558:34:119;32628:15;;;32608:18;;;32601:43;32680:15;;;32660:18;;;32653:43;32712:18;;;32705:34;;;;5392:48:93;;-1:-1:-1;5451:20:93;;;;;32492:19:119;;5451:67:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5528:51;5543:5;5550:15;5567:5;5574:4;5528:14;:51::i;:::-;5643:5;-1:-1:-1;;;;;5595:54:93;5637:4;-1:-1:-1;;;;;5595:54:93;5623:11;-1:-1:-1;;;;;5595:54:93;;5608:5;5595:54;;;;;;:::i;941:175:50:-;1050:58;;-1:-1:-1;;;;;15345:32:119;;1050:58:50;;;15327:51:119;15394:18;;;15387:34;;;1023:86:50;;1043:5;;-1:-1:-1;;;1073:23:50;15300:18:119;;1050:58:50;;;;-1:-1:-1;;1050:58:50;;;;;;;;;;;;;;-1:-1:-1;;;;;1050:58:50;-1:-1:-1;;;;;;1050:58:50;;;;;;;;;;1023:19;:86::i;1355:203::-;1482:68;;-1:-1:-1;;;;;38592:15:119;;;1482:68:50;;;38574:34:119;38644:15;;38624:18;;;38617:43;38676:18;;;38669:34;;;1455:96:50;;1475:5;;-1:-1:-1;;;1505:27:50;38509:18:119;;1482:68:50;38334:375:119;704:427:62;768:4;975:68;1008:7;-1:-1:-1;;;975:32:62;:68::i;:::-;:149;;;;-1:-1:-1;1060:64:62;1093:7;-1:-1:-1;;;;;;4421:647:62;4592:71;;;-1:-1:-1;;;;;;4254:33:119;;4592:71:62;;;;4236:52:119;;;;4592:71:62;;;;;;;;;;4209:18:119;;;;4592:71:62;;;;;;;;;-1:-1:-1;;;;;4592:71:62;-1:-1:-1;;;4592:71:62;;;4871:20;;4523:4;;4592:71;4523:4;;;;;;4592:71;4523:4;;4871:20;4836:7;4829:5;4818:86;4807:97;;4931:16;4917:30;;4981:4;4975:11;4960:26;;5013:7;:29;;;;;5038:4;5024:10;:18;;5013:29;:48;;;;;5060:1;5046:11;:15;5013:48;5006:55;4421:647;-1:-1:-1;;;;;;;4421:647:62:o;1349:282::-;1436:4;1543:23;1558:7;1543:14;:23::i;:::-;:81;;;;;1570:54;1603:7;1612:11;1570:32;:54::i;5196:642:50:-;5615:23;5641:69;5669:4;5641:69;;;;;;;;;;;;;;;;;5649:5;-1:-1:-1;;;;;5641:27:50;;;:69;;;;;:::i;:::-;5615:95;;5728:10;:17;5749:1;5728:22;:56;;;;5765:10;5754:30;;;;;;;;;;;;:::i;:::-;5720:111;;;;-1:-1:-1;;;5720:111:50;;40108:2:119;5720:111:50;;;40090:21:119;40147:2;40127:18;;;40120:30;40186:34;40166:18;;;40159:62;-1:-1:-1;;;40237:18:119;;;40230:40;40287:19;;5720:111:50;39906:406:119;4108:223:55;4241:12;4272:52;4294:6;4302:4;4308:1;4311:12;4241;5446;5460:23;5487:6;-1:-1:-1;;;;;5487:11:55;5506:5;5513:4;5487:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5445:73;;;;5535:69;5562:6;5570:7;5579:10;5591:12;7851;7879:7;7875:418;;;7906:10;:17;7927:1;7906:22;7902:286;;-1:-1:-1;;;;;1702:19:55;;;8113:60;;;;-1:-1:-1;;;8113:60:55;;40926:2:119;8113:60:55;;;40908:21:119;40965:2;40945:18;;;40938:30;41004:31;40984:18;;;40977:59;41053:18;;8113:60:55;40724:353:119;8113:60:55;-1:-1:-1;8208:10:55;8201:17;;7875:418;8249:33;8257:10;8269:12;8980:17;;:21;8976:379;;9208:10;9202:17;9264:15;9251:10;9247:2;9243:19;9236:44;8976:379;9331:12;9324:20;;-1:-1:-1;;;9324:20:55;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:286:119:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:119;;209:43;;199:71;;266:1;263;256:12;497:166;567:5;612:3;603:6;598:3;594:16;590:26;587:46;;;629:1;626;619:12;587:46;-1:-1:-1;651:6:119;497:166;-1:-1:-1;497:166:119:o;668:347::-;719:8;729:6;783:3;776:4;768:6;764:17;760:27;750:55;;801:1;798;791:12;750:55;-1:-1:-1;824:20:119;;-1:-1:-1;;;;;856:30:119;;853:50;;;899:1;896;889:12;853:50;936:4;928:6;924:17;912:29;;988:3;981:4;972:6;964;960:19;956:30;953:39;950:59;;;1005:1;1002;995:12;1020:867;1157:6;1165;1173;1181;1189;1242:3;1230:9;1221:7;1217:23;1213:33;1210:53;;;1259:1;1256;1249:12;1210:53;1282:64;1338:7;1327:9;1282:64;:::i;:::-;1272:74;;1397:3;1386:9;1382:19;1369:33;-1:-1:-1;;;;;1462:2:119;1454:6;1451:14;1448:34;;;1478:1;1475;1468:12;1448:34;1517:58;1567:7;1558:6;1547:9;1543:22;1517:58;:::i;:::-;1594:8;;-1:-1:-1;1491:84:119;-1:-1:-1;1682:3:119;1667:19;;1654:33;;-1:-1:-1;1699:16:119;;;1696:36;;;1728:1;1725;1718:12;1696:36;;1767:60;1819:7;1808:8;1797:9;1793:24;1767:60;:::i;:::-;1020:867;;;;-1:-1:-1;1020:867:119;;-1:-1:-1;1846:8:119;;1741:86;1020:867;-1:-1:-1;;;1020:867:119:o;2117:180::-;2176:6;2229:2;2217:9;2208:7;2204:23;2200:32;2197:52;;;2245:1;2242;2235:12;2197:52;-1:-1:-1;2268:23:119;;2117:180;-1:-1:-1;2117:180:119:o;2302:250::-;2387:1;2397:113;2411:6;2408:1;2405:13;2397:113;;;2487:11;;;2481:18;2468:11;;;2461:39;2433:2;2426:10;2397:113;;;-1:-1:-1;;2544:1:119;2526:16;;2519:27;2302:250::o;2557:271::-;2599:3;2637:5;2631:12;2664:6;2659:3;2652:19;2680:76;2749:6;2742:4;2737:3;2733:14;2726:4;2719:5;2715:16;2680:76;:::i;:::-;2810:2;2789:15;-1:-1:-1;;2785:29:119;2776:39;;;;2817:4;2772:50;;2557:271;-1:-1:-1;;2557:271:119:o;2833:220::-;2982:2;2971:9;2964:21;2945:4;3002:45;3043:2;3032:9;3028:18;3020:6;3002:45;:::i;3058:131::-;-1:-1:-1;;;;;3133:31:119;;3123:42;;3113:70;;3179:1;3176;3169:12;3194:134;3262:20;;3291:31;3262:20;3291:31;:::i;3333:754::-;3430:6;3438;3446;3454;3462;3515:3;3503:9;3494:7;3490:23;3486:33;3483:53;;;3532:1;3529;3522:12;3483:53;3571:9;3558:23;3590:31;3615:5;3590:31;:::i;:::-;3640:5;-1:-1:-1;3697:2:119;3682:18;;3669:32;3710:33;3669:32;3710:33;:::i;:::-;3762:7;-1:-1:-1;3816:2:119;3801:18;;3788:32;;-1:-1:-1;3871:2:119;3856:18;;3843:32;-1:-1:-1;;;;;3887:30:119;;3884:50;;;3930:1;3927;3920:12;3884:50;3969:58;4019:7;4010:6;3999:9;3995:22;3969:58;:::i;4887:260::-;4984:6;5037:3;5025:9;5016:7;5012:23;5008:33;5005:53;;;5054:1;5051;5044:12;5005:53;5077:64;5133:7;5122:9;5077:64;:::i;5362:127::-;5423:10;5418:3;5414:20;5411:1;5404:31;5454:4;5451:1;5444:15;5478:4;5475:1;5468:15;5494:454;5569:5;5563:12;5601:1;5597:2;5594:9;5584:140;;5646:10;5641:3;5637:20;5634:1;5627:31;5681:4;5678:1;5671:15;5709:4;5706:1;5699:15;5584:140;5733:15;;5801:4;5790:16;;;5784:23;-1:-1:-1;;;;;5780:49:119;5764:14;;;5757:73;5879:4;5868:16;;;5862:23;5846:14;;;5839:47;5935:4;5924:16;;;5918:23;5902:14;;5895:47;5494:454::o;5953:1225::-;6514:4;6502:17;;6484:36;;6539:12;6587:15;;;6582:2;6567:18;;6560:43;6639:15;;;6634:2;6619:18;;6612:43;-1:-1:-1;;;;;6729:15:119;;;6724:2;6709:18;;6702:43;6782:15;;;6776:3;6761:19;;6754:44;6835:15;;6682:3;6814:19;;6807:44;6888:15;;6882:3;6867:19;;6860:44;6935:3;6920:19;;6913:35;;;6471:3;6456:19;;6957:52;7004:3;6989:19;;6981:6;6957:52;:::i;:::-;7018;7065:3;7054:9;7050:19;7042:6;7018:52;:::i;:::-;-1:-1:-1;;;;;5319:31:119;;;;7122:3;7107:19;;5307:44;7158:3;7143:19;7136:36;5953:1225;;-1:-1:-1;;;;;;;;;;5953:1225:119:o;7428:477::-;7507:6;7515;7523;7576:2;7564:9;7555:7;7551:23;7547:32;7544:52;;;7592:1;7589;7582:12;7544:52;7628:9;7615:23;7605:33;;7689:2;7678:9;7674:18;7661:32;-1:-1:-1;;;;;7708:6:119;7705:30;7702:50;;;7748:1;7745;7738:12;7702:50;7787:58;7837:7;7828:6;7817:9;7813:22;7787:58;:::i;:::-;7428:477;;7864:8;;-1:-1:-1;7761:84:119;;-1:-1:-1;;;;7428:477:119:o;8095:127::-;8156:10;8151:3;8147:20;8144:1;8137:31;8187:4;8184:1;8177:15;8211:4;8208:1;8201:15;8227:250;8294:2;8288:9;8336:6;8324:19;;-1:-1:-1;;;;;8358:34:119;;8394:22;;;8355:62;8352:88;;;8420:18;;:::i;:::-;8456:2;8449:22;8227:250;:::o;8482:107::-;8563:1;8556:5;8553:12;8543:40;;8579:1;8576;8569:12;8594:780;8674:6;8727:3;8715:9;8706:7;8702:23;8698:33;8695:53;;;8744:1;8741;8734:12;8695:53;8777:2;8771:9;8819:3;8811:6;8807:16;8889:6;8877:10;8874:22;-1:-1:-1;;;;;8841:10:119;8838:34;8835:62;8832:88;;;8900:18;;:::i;:::-;8936:2;8929:22;8973:23;;9005:37;8973:23;9005:37;:::i;:::-;9051:21;;9124:2;9109:18;;9096:32;9137:33;9096:32;9137:33;:::i;:::-;9198:2;9186:15;;9179:32;9272:2;9257:18;;;9244:32;9227:15;;;9220:57;9338:2;9323:18;;;9310:32;9293:15;;;9286:57;;;;-1:-1:-1;9190:6:119;8594:780;-1:-1:-1;8594:780:119:o;9902:383::-;9979:6;9987;9995;10048:2;10036:9;10027:7;10023:23;10019:32;10016:52;;;10064:1;10061;10054:12;10016:52;10100:9;10087:23;10077:33;;10157:2;10146:9;10142:18;10129:32;10119:42;;10211:2;10200:9;10196:18;10183:32;10224:31;10249:5;10224:31;:::i;:::-;10274:5;10264:15;;;9902:383;;;;;:::o;10523:367::-;10586:8;10596:6;10650:3;10643:4;10635:6;10631:17;10627:27;10617:55;;10668:1;10665;10658:12;10617:55;-1:-1:-1;10691:20:119;;-1:-1:-1;;;;;10723:30:119;;10720:50;;;10766:1;10763;10756:12;10720:50;10803:4;10795:6;10791:17;10779:29;;10863:3;10856:4;10846:6;10843:1;10839:14;10831:6;10827:27;10823:38;10820:47;10817:67;;;10880:1;10877;10870:12;10895:1338;11055:6;11063;11071;11079;11087;11095;11103;11111;11164:3;11152:9;11143:7;11139:23;11135:33;11132:53;;;11181:1;11178;11171:12;11132:53;11220:9;11207:23;11239:31;11264:5;11239:31;:::i;:::-;11289:5;-1:-1:-1;11346:2:119;11331:18;;11318:32;11359:33;11318:32;11359:33;:::i;:::-;11411:7;-1:-1:-1;11469:2:119;11454:18;;11441:32;-1:-1:-1;;;;;11522:14:119;;;11519:34;;;11549:1;11546;11539:12;11519:34;11588:70;11650:7;11641:6;11630:9;11626:22;11588:70;:::i;:::-;11677:8;;-1:-1:-1;11562:96:119;-1:-1:-1;11765:2:119;11750:18;;11737:32;;-1:-1:-1;11781:16:119;;;11778:36;;;11810:1;11807;11800:12;11778:36;11849:72;11913:7;11902:8;11891:9;11887:24;11849:72;:::i;:::-;11940:8;;-1:-1:-1;11823:98:119;-1:-1:-1;12028:3:119;12013:19;;12000:33;;-1:-1:-1;12045:16:119;;;12042:36;;;12074:1;12071;12064:12;12042:36;;12113:60;12165:7;12154:8;12143:9;12139:24;12113:60;:::i;:::-;10895:1338;;;;-1:-1:-1;10895:1338:119;;-1:-1:-1;10895:1338:119;;;;;;12192:8;-1:-1:-1;;;10895:1338:119:o;12437:158::-;12500:5;12545:2;12536:6;12531:3;12527:16;12523:25;12520:45;;;12561:1;12558;12551:12;12600:245;12690:6;12743:2;12731:9;12722:7;12718:23;12714:32;12711:52;;;12759:1;12756;12749:12;12711:52;12782:57;12831:7;12820:9;12782:57;:::i;12850:161::-;12915:5;12960:3;12951:6;12946:3;12942:16;12938:26;12935:46;;;12977:1;12974;12967:12;13016:1052;13208:6;13216;13224;13232;13240;13293:3;13281:9;13272:7;13268:23;13264:33;13261:53;;;13310:1;13307;13300:12;13261:53;13350:9;13337:23;-1:-1:-1;;;;;13420:2:119;13412:6;13409:14;13406:34;;;13436:1;13433;13426:12;13406:34;13459:72;13523:7;13514:6;13503:9;13499:22;13459:72;:::i;:::-;13449:82;;13550:66;13608:7;13603:2;13592:9;13588:18;13550:66;:::i;:::-;13540:76;;13669:2;13658:9;13654:18;13641:32;13625:48;;13698:2;13688:8;13685:16;13682:36;;;13714:1;13711;13704:12;13682:36;13737:74;13803:7;13792:8;13781:9;13777:24;13737:74;:::i;:::-;13727:84;;13864:2;13853:9;13849:18;13836:32;13820:48;;13893:2;13883:8;13880:16;13877:36;;;13909:1;13906;13899:12;14073:823;14179:6;14187;14195;14203;14211;14219;14272:3;14260:9;14251:7;14247:23;14243:33;14240:53;;;14289:1;14286;14279:12;14240:53;14328:9;14315:23;14347:31;14372:5;14347:31;:::i;:::-;14397:5;-1:-1:-1;14454:2:119;14439:18;;14426:32;14467:33;14426:32;14467:33;:::i;:::-;14519:7;-1:-1:-1;14573:2:119;14558:18;;14545:32;;-1:-1:-1;14624:2:119;14609:18;;14596:32;;-1:-1:-1;14679:3:119;14664:19;;14651:33;-1:-1:-1;;;;;14696:30:119;;14693:50;;;14739:1;14736;14729:12;14693:50;14778:58;14828:7;14819:6;14808:9;14804:22;14778:58;:::i;:::-;14073:823;;;;-1:-1:-1;14073:823:119;;-1:-1:-1;14073:823:119;;14855:8;;14073:823;-1:-1:-1;;;14073:823:119:o;14901:247::-;14960:6;15013:2;15001:9;14992:7;14988:23;14984:32;14981:52;;;15029:1;15026;15019:12;14981:52;15068:9;15055:23;15087:31;15112:5;15087:31;:::i;15432:123::-;15517:12;15510:5;15506:24;15499:5;15496:35;15486:63;;15545:1;15542;15535:12;15560:245;15618:6;15671:2;15659:9;15650:7;15646:23;15642:32;15639:52;;;15687:1;15684;15677:12;15639:52;15726:9;15713:23;15745:30;15769:5;15745:30;:::i;16431:118::-;16517:5;16510:13;16503:21;16496:5;16493:32;16483:60;;16539:1;16536;16529:12;16554:245;16621:6;16674:2;16662:9;16653:7;16649:23;16645:32;16642:52;;;16690:1;16687;16680:12;16642:52;16722:9;16716:16;16741:28;16763:5;16741:28;:::i;16804:138::-;16883:13;;16905:31;16883:13;16905:31;:::i;16947:251::-;17017:6;17070:2;17058:9;17049:7;17045:23;17041:32;17038:52;;;17086:1;17083;17076:12;17038:52;17118:9;17112:16;17137:31;17162:5;17137:31;:::i;17783:127::-;17844:10;17839:3;17835:20;17832:1;17825:31;17875:4;17872:1;17865:15;17899:4;17896:1;17889:15;17915:174;17982:12;18014:10;;;18026;;;18010:27;;18049:11;;;18046:37;;;18063:18;;:::i;:::-;18046:37;17915:174;;;;:::o;18392:114::-;18476:4;18469:5;18465:16;18458:5;18455:27;18445:55;;18496:1;18493;18486:12;18511:1053;18595:6;18648:3;18636:9;18627:7;18623:23;18619:33;18616:53;;;18665:1;18662;18655:12;18616:53;18698:2;18692:9;18740:3;18732:6;18728:16;18810:6;18798:10;18795:22;-1:-1:-1;;;;;18762:10:119;18759:34;18756:62;18753:88;;;18821:18;;:::i;:::-;18857:2;18850:22;18894:23;;18926:31;18894:23;18926:31;:::i;:::-;18966:21;;19039:2;19024:18;;19011:32;19052:33;19011:32;19052:33;:::i;:::-;19118:7;19113:2;19105:6;19101:15;19094:32;;19187:2;19176:9;19172:18;19159:32;19154:2;19146:6;19142:15;19135:57;19253:2;19242:9;19238:18;19225:32;19220:2;19212:6;19208:15;19201:57;19310:3;19299:9;19295:19;19282:33;19324:31;19347:7;19324:31;:::i;:::-;19383:3;19371:16;;19364:33;19459:3;19444:19;;;19431:33;19413:16;;;19406:59;19527:3;19512:19;;;19499:33;19481:16;;;19474:59;;;;-1:-1:-1;19375:6:119;18511:1053;-1:-1:-1;18511:1053:119:o;19777:897::-;19857:6;19910:2;19898:9;19889:7;19885:23;19881:32;19878:52;;;19926:1;19923;19916:12;19878:52;19959:9;19953:16;-1:-1:-1;;;;;20029:2:119;20021:6;20018:14;20015:34;;;20045:1;20042;20035:12;20015:34;20083:6;20072:9;20068:22;20058:32;;20128:7;20121:4;20117:2;20113:13;20109:27;20099:55;;20150:1;20147;20140:12;20099:55;20179:2;20173:9;20201:2;20197;20194:10;20191:36;;;20207:18;;:::i;:::-;20282:2;20276:9;20250:2;20336:13;;-1:-1:-1;;20332:22:119;;;20356:2;20328:31;20324:40;20312:53;;;20380:18;;;20400:22;;;20377:46;20374:72;;;20426:18;;:::i;:::-;20466:10;20462:2;20455:22;20501:2;20493:6;20486:18;20541:7;20536:2;20531;20527;20523:11;20519:20;20516:33;20513:53;;;20562:1;20559;20552:12;20513:53;20575:68;20640:2;20635;20627:6;20623:15;20618:2;20614;20610:11;20575:68;:::i;20679:1082::-;20918:20;;20900:39;;20887:3;20872:19;;20986:4;20974:17;;20961:31;21001;20961;21001;:::i;:::-;-1:-1:-1;;;;;21070:31:119;21063:4;21048:20;;21041:61;21165:4;21153:17;;;21140:31;21118:20;;;21111:61;21221:4;21209:17;;21196:31;21236:32;21196:31;21236:32;:::i;:::-;21319:12;21306:26;21299:4;21284:20;;21277:56;21382:4;21370:17;;21357:31;21397:32;21357:31;21397:32;:::i;:::-;5228:12;5217:24;21480:4;21465:20;;5205:37;21515;21546:4;21534:17;;21515:37;:::i;:::-;-1:-1:-1;;;;;5319:31:119;;21609:4;21594:20;;5307:44;21561:54;21678:4;21670:6;21666:17;21653:31;21646:4;21635:9;21631:20;21624:61;21748:4;21740:6;21736:17;21723:31;21716:4;21705:9;21701:20;21694:61;20679:1082;;;;:::o;22116:359::-;22303:6;22298:3;22291:19;22273:3;22339:6;22333:13;22355:73;22421:6;22416:2;22411:3;22407:12;22402:2;22394:6;22390:15;22355:73;:::i;:::-;22448:16;;;;22466:2;22444:25;;22116:359;-1:-1:-1;;;22116:359:119:o;23155:210::-;23256:5;23243:19;23271:33;23296:7;23271:33;:::i;:::-;-1:-1:-1;;;;;23325:33:119;23313:46;;;-1:-1:-1;23155:210:119:o;23370:344::-;23564:2;23549:18;;23589:20;;23618:31;23589:20;23618:31;:::i;:::-;-1:-1:-1;;;;;23676:31:119;23658:50;;;23370:344;;-1:-1:-1;23370:344:119:o;23719:241::-;23775:6;23828:2;23816:9;23807:7;23803:23;23799:32;23796:52;;;23844:1;23841;23834:12;23796:52;23883:9;23870:23;23902:28;23924:5;23902:28;:::i;24244:521::-;24321:4;24327:6;24387:11;24374:25;24481:2;24477:7;24466:8;24450:14;24446:29;24442:43;24422:18;24418:68;24408:96;;24500:1;24497;24490:12;24408:96;24527:33;;24579:20;;;-1:-1:-1;;;;;;24611:30:119;;24608:50;;;24654:1;24651;24644:12;24608:50;24687:4;24675:17;;-1:-1:-1;24718:14:119;24714:27;;;24704:38;;24701:58;;;24755:1;24752;24745:12;24770:545;24863:4;24869:6;24929:11;24916:25;25023:2;25019:7;25008:8;24992:14;24988:29;24984:43;24964:18;24960:68;24950:96;;25042:1;25039;25032:12;24950:96;25069:33;;25121:20;;;-1:-1:-1;;;;;;25153:30:119;;25150:50;;;25196:1;25193;25186:12;25150:50;25229:4;25217:17;;-1:-1:-1;25280:1:119;25276:14;;;25260;25256:35;25246:46;;25243:66;;;25305:1;25302;25295:12;25320:266;25408:6;25403:3;25396:19;25460:6;25453:5;25446:4;25441:3;25437:14;25424:43;-1:-1:-1;25512:1:119;25487:16;;;25505:4;25483:27;;;25476:38;;;;25568:2;25547:15;;;-1:-1:-1;;25543:29:119;25534:39;;;25530:50;;25320:266::o;25591:979::-;25977:1;25973;25968:3;25964:11;25960:19;25952:6;25948:32;25937:9;25930:51;26017:6;26012:2;26001:9;25997:18;25990:34;26060:3;26055:2;26044:9;26040:18;26033:31;25911:4;26087:62;26144:3;26133:9;26129:19;26121:6;26113;26087:62;:::i;:::-;26185:22;;;26180:2;26165:18;;26158:50;26217:22;;;-1:-1:-1;;;;;26251:31:119;;26248:51;;;26295:1;26292;26285:12;26248:51;26329:6;26326:1;26322:14;26383:6;26375;26370:2;26362:6;26358:15;26345:45;26409:19;26469:18;;;26489:2;26465:27;;;26459:3;26444:19;;26437:56;26510:54;;26552:11;;26544:6;26536;26510:54;:::i;:::-;26502:62;25591:979;-1:-1:-1;;;;;;;;;;;25591:979:119:o;26575:167::-;26653:13;;26706:10;26695:22;;26685:33;;26675:61;;26732:1;26729;26722:12;26747:737;26810:5;26858:4;26846:9;26841:3;26837:19;26833:30;26830:50;;;26876:1;26873;26866:12;26830:50;26909:2;26903:9;26951:4;26943:6;26939:17;27022:6;27010:10;27007:22;-1:-1:-1;;;;;26974:10:119;26971:34;26968:62;26965:88;;;27033:18;;:::i;:::-;27073:10;27069:2;27062:22;;27102:6;27093:15;;27138:9;27132:16;27157:39;27188:7;27157:39;:::i;:::-;27205:23;;27273:2;27258:18;;27252:25;27286:33;27252:25;27286:33;:::i;:::-;27352:7;27347:2;27339:6;27335:15;27328:32;;27414:2;27403:9;27399:18;27393:25;27388:2;27380:6;27376:15;27369:50;27473:2;27462:9;27458:18;27452:25;27447:2;27439:6;27435:15;27428:50;;26747:737;;;;:::o;27489:136::-;27567:13;;27589:30;27567:13;27589:30;:::i;27630:1104::-;27733:6;27741;27785:9;27776:7;27772:23;27815:3;27811:2;27807:12;27804:32;;;27832:1;27829;27822:12;27804:32;27861:9;27855:16;27845:26;;27890:6;27930:2;27924;27920:7;27916:2;27912:16;27908:25;27905:45;;;27946:1;27943;27936:12;27905:45;27972:17;;:::i;:::-;27959:30;;28012:49;28057:2;28046:9;28042:18;28012:49;:::i;:::-;28005:5;27998:64;28094:49;28139:2;28128:9;28124:18;28094:49;:::i;:::-;28089:2;28082:5;28078:14;28071:73;28176:48;28220:2;28209:9;28205:18;28176:48;:::i;:::-;28171:2;28164:5;28160:14;28153:72;28257:64;28313:7;28307:3;28296:9;28292:19;28257:64;:::i;:::-;28252:2;28245:5;28241:14;28234:88;28341:3;28377:63;28432:7;28427:2;28416:9;28412:18;28377:63;:::i;:::-;28371:3;28364:5;28360:15;28353:88;28496:3;28485:9;28481:19;28475:26;28468:4;28461:5;28457:16;28450:52;28536:49;28580:3;28569:9;28565:19;28536:49;:::i;:::-;28529:4;28518:16;;28511:75;28640:3;28625:19;;28619:26;28613:3;28602:15;;28595:51;28684:18;;28678:25;28662:14;;;28655:49;;;;-1:-1:-1;27630:1104:119;28522:5;;-1:-1:-1;27630:1104:119:o;30038:289::-;30213:6;30202:9;30195:25;30256:2;30251;30240:9;30236:18;30229:30;30176:4;30276:45;30317:2;30306:9;30302:18;30294:6;30276:45;:::i;30332:287::-;30461:3;30499:6;30493:13;30515:66;30574:6;30569:3;30562:4;30554:6;30550:17;30515:66;:::i;:::-;30597:16;;;;;30332:287;-1:-1:-1;;30332:287:119:o;30624:184::-;30694:6;30747:2;30735:9;30726:7;30722:23;30718:32;30715:52;;;30763:1;30760;30753:12;30715:52;-1:-1:-1;30786:16:119;;30624:184;-1:-1:-1;30624:184:119:o;30813:125::-;30878:9;;;30899:10;;;30896:36;;;30912:18;;:::i;32047:237::-;32223:3;32208:19;;32236:42;32212:9;32260:6;32236:42;:::i;32939:1371::-;33283:13;;-1:-1:-1;;;;;5319:31:119;5307:44;;33223:4;33252:3;33355:4;33347:6;33343:17;33337:24;33370:54;33418:4;33407:9;33403:20;33389:12;-1:-1:-1;;;;;5319:31:119;5307:44;;5253:104;33370:54;;33473:4;33465:6;33461:17;33455:24;33488:55;33537:4;33526:9;33522:20;33506:14;9682:10;9671:22;9659:35;;9606:94;33488:55;;33592:4;33584:6;33580:17;33574:24;33607:61;33662:4;33651:9;33647:20;33631:14;33607:61;:::i;:::-;;33717:4;33709:6;33705:17;33699:24;33732:61;33787:4;33776:9;33772:20;33756:14;33732:61;:::i;:::-;-1:-1:-1;33851:4:119;33839:17;;33833:24;33824:6;33809:22;;33802:56;33907:4;33895:17;;33889:24;5228:12;5217:24;33971:6;33956:22;;5205:37;34037:4;34025:17;;34019:24;34010:6;33995:22;;33988:56;34102:6;34090:19;;34084:26;34075:6;34060:22;;34053:58;34120:66;34181:3;34166:19;;34158:6;34120:66;:::i;:::-;34223:2;34217:3;34206:9;34202:19;34195:31;34243:61;34300:2;34289:9;34285:18;34277:6;34269;34243:61;:::i;34315:276::-;34384:6;34437:2;34425:9;34416:7;34412:23;34408:32;34405:52;;;34453:1;34450;34443:12;34405:52;34485:9;34479:16;34535:6;34528:5;34524:18;34517:5;34514:29;34504:57;;34557:1;34554;34547:12;34596:128;34663:9;;;34684:11;;;34681:37;;;34698:18;;:::i;35090:127::-;35151:10;35146:3;35142:20;35139:1;35132:31;35182:4;35179:1;35172:15;35206:4;35203:1;35196:15;35222:217;35262:1;35288;35278:132;;35332:10;35327:3;35323:20;35320:1;35313:31;35367:4;35364:1;35357:15;35395:4;35392:1;35385:15;35278:132;-1:-1:-1;35424:9:119;;35222:217::o;35444:168::-;35484:7;35550:1;35546;35542:6;35538:14;35535:1;35532:21;35527:1;35520:9;35513:17;35509:45;35506:71;;;35557:18;;:::i;:::-;-1:-1:-1;35597:9:119;;35444:168::o;35617:247::-;35685:6;35738:2;35726:9;35717:7;35713:23;35709:32;35706:52;;;35754:1;35751;35744:12;35706:52;35786:9;35780:16;35805:29;35828:5;35805:29;:::i",
    "linkReferences": {},
    "immutableReferences": {
      "61018": [
        {
          "start": 788,
          "length": 32
        },
        {
          "start": 5181,
          "length": 32
        }
      ],
      "61021": [
        {
          "start": 827,
          "length": 32
        },
        {
          "start": 5885,
          "length": 32
        }
      ],
      "61024": [
        {
          "start": 589,
          "length": 32
        },
        {
          "start": 2160,
          "length": 32
        },
        {
          "start": 3274,
          "length": 32
        },
        {
          "start": 4269,
          "length": 32
        },
        {
          "start": 4913,
          "length": 32
        },
        {
          "start": 9172,
          "length": 32
        },
        {
          "start": 10027,
          "length": 32
        },
        {
          "start": 11131,
          "length": 32
        }
      ],
      "61027": [
        {
          "start": 1108,
          "length": 32
        },
        {
          "start": 3590,
          "length": 32
        },
        {
          "start": 5599,
          "length": 32
        },
        {
          "start": 10755,
          "length": 32
        },
        {
          "start": 10934,
          "length": 32
        },
        {
          "start": 11269,
          "length": 32
        },
        {
          "start": 11705,
          "length": 32
        },
        {
          "start": 13683,
          "length": 32
        }
      ],
      "61030": [
        {
          "start": 1206,
          "length": 32
        },
        {
          "start": 1881,
          "length": 32
        },
        {
          "start": 2713,
          "length": 32
        },
        {
          "start": 6221,
          "length": 32
        }
      ],
      "61033": [
        {
          "start": 967,
          "length": 32
        },
        {
          "start": 5141,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "APR_INTEREST_DENOMINATOR()": "a11a581c",
    "APR_TO_DAILY_INTEREST_DENOMINATOR()": "58b5d263",
    "APR_TO_DAILY_INTEREST_NUMERATOR()": "25f2c190",
    "DAILY_INTEREST_DENOMINATOR()": "a2d00469",
    "DOMAIN_SEPARATOR()": "3644e515",
    "EXTENSION_PROPOSAL_TYPEHASH()": "4acacdda",
    "MAX_ACCRUING_INTEREST_APR()": "c399e17d",
    "MAX_EXTENSION_DURATION()": "2c8ebec8",
    "MIN_EXTENSION_DURATION()": "7f24133f",
    "MIN_LOAN_DURATION()": "89d99a05",
    "VERSION()": "ffa1ad74",
    "categoryRegistry()": "58099d96",
    "claimLOAN(uint256)": "0ee1ba17",
    "config()": "79502c55",
    "createLOAN((address,bytes,bytes32[],bytes),(address),(uint256,bool,uint256,bytes),bytes)": "da8c3b70",
    "extendLOAN((uint256,address,uint256,uint40,uint40,address,uint256,uint256),bytes,bytes)": "028232ea",
    "extensionProposalsMade(bytes32)": "640d16ed",
    "getExtensionHash((uint256,address,uint256,uint40,uint40,address,uint256,uint256))": "74baf6ef",
    "getLOAN(uint256)": "3e6df512",
    "getLenderSpecHash((address))": "c8198080",
    "getStateFingerprint(uint256)": "f5112315",
    "hub()": "365a86fc",
    "isValidAsset((uint8,address,uint256,uint256))": "7122192c",
    "loanMetadataUri()": "111d8a15",
    "loanRepaymentAmount(uint256)": "2c3eae8a",
    "loanToken()": "06d37817",
    "makeExtensionProposal((uint256,address,uint256,uint40,uint40,address,uint256,uint256))": "376af4d1",
    "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": "bc197c81",
    "onERC1155Received(address,address,uint256,uint256,bytes)": "f23a6e61",
    "onERC721Received(address,address,uint256,bytes)": "150b7a02",
    "repayLOAN(uint256,bytes)": "632c6a23",
    "revokedNonce()": "9788ad55",
    "supportsInterface(bytes4)": "01ffc9a7",
    "tryClaimRepaidLOAN(uint256,uint256,address)": "94aedc2f"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.16+commit.07a7930e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_hub\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_loanToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_config\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_revokedNonce\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_categoryRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"tag\",\"type\":\"bytes32\"}],\"name\":\"AddressMissingHubTag\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotLOANTokenHolder\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"current\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"}],\"name\":\"Expired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncompleteTransfer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"current\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"InterestAPROutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"current\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"InvalidDuration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExtensionCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"InvalidExtensionDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"allowed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"InvalidExtensionSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"current\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"InvalidLenderSpecHash\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InvalidMultiTokenAsset\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expected\",\"type\":\"address\"}],\"name\":\"InvalidPermitAsset\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expected\",\"type\":\"address\"}],\"name\":\"InvalidPermitOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sourceOfFunds\",\"type\":\"address\"}],\"name\":\"InvalidSourceOfFunds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"name\":\"LoanDefaulted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LoanNotRunning\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LoanRepaid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LoanRunning\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonExistingLoan\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonceSpace\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"NonceNotUsable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currentBorrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newBorrower\",\"type\":\"address\"}],\"name\":\"RefinanceBorrowerMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RefinanceCollateralMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RefinanceCreditMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryValue\",\"type\":\"uint8\"}],\"name\":\"UnsupportedCategory\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedTransferFunction\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"extensionHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"compensationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"compensationAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"duration\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"expiration\",\"type\":\"uint40\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonceSpace\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct PWNSimpleLoan.ExtensionProposal\",\"name\":\"proposal\",\"type\":\"tuple\"}],\"name\":\"ExtensionProposalMade\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"defaulted\",\"type\":\"bool\"}],\"name\":\"LOANClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"proposalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposalContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"lender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"duration\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"enum MultiToken.Category\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct MultiToken.Asset\",\"name\":\"collateral\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum MultiToken.Category\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct MultiToken.Asset\",\"name\":\"credit\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"fixedInterestAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"accruingInterestAPR\",\"type\":\"uint40\"},{\"internalType\":\"bytes32\",\"name\":\"lenderSpecHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"borrowerSpecHash\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct PWNSimpleLoan.Terms\",\"name\":\"terms\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceOfFunds\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PWNSimpleLoan.LenderSpec\",\"name\":\"lenderSpec\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extra\",\"type\":\"bytes\"}],\"name\":\"LOANCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"originalDefaultTimestamp\",\"type\":\"uint40\"},{\"indexed\":false,\"internalType\":\"uint40\",\"name\":\"extendedDefaultTimestamp\",\"type\":\"uint40\"}],\"name\":\"LOANExtended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"}],\"name\":\"LOANPaidBack\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"refinancedLoanId\",\"type\":\"uint256\"}],\"name\":\"LOANRefinanced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"enum MultiToken.Category\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct MultiToken.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolAdapter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"PoolSupply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"enum MultiToken.Category\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct MultiToken.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolAdapter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"PoolWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"enum MultiToken.Category\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct MultiToken.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"}],\"name\":\"VaultPull\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"enum MultiToken.Category\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct MultiToken.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"VaultPush\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"enum MultiToken.Category\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct MultiToken.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"VaultPushFrom\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"APR_INTEREST_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"APR_TO_DAILY_INTEREST_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"APR_TO_DAILY_INTEREST_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DAILY_INTEREST_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EXTENSION_PROPOSAL_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_ACCRUING_INTEREST_APR\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXTENSION_DURATION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_EXTENSION_DURATION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_LOAN_DURATION\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"categoryRegistry\",\"outputs\":[{\"internalType\":\"contract IMultiTokenCategoryRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"}],\"name\":\"claimLOAN\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"internalType\":\"contract PWNConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"proposalContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"proposalData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"proposalInclusionProof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PWNSimpleLoan.ProposalSpec\",\"name\":\"proposalSpec\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceOfFunds\",\"type\":\"address\"}],\"internalType\":\"struct PWNSimpleLoan.LenderSpec\",\"name\":\"lenderSpec\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"refinancingLoanId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"revokeNonce\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"permitData\",\"type\":\"bytes\"}],\"internalType\":\"struct PWNSimpleLoan.CallerSpec\",\"name\":\"callerSpec\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"extra\",\"type\":\"bytes\"}],\"name\":\"createLOAN\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"compensationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"compensationAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"duration\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"expiration\",\"type\":\"uint40\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonceSpace\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"struct PWNSimpleLoan.ExtensionProposal\",\"name\":\"extension\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"permitData\",\"type\":\"bytes\"}],\"name\":\"extendLOAN\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"extensionProposalsMade\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"compensationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"compensationAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"duration\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"expiration\",\"type\":\"uint40\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonceSpace\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"struct PWNSimpleLoan.ExtensionProposal\",\"name\":\"extension\",\"type\":\"tuple\"}],\"name\":\"getExtensionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"}],\"name\":\"getLOAN\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"uint40\",\"name\":\"startTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"defaultTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"originalLender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"loanOwner\",\"type\":\"address\"},{\"internalType\":\"uint40\",\"name\":\"accruingInterestDailyRate\",\"type\":\"uint40\"},{\"internalType\":\"uint256\",\"name\":\"fixedInterestAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"enum MultiToken.Category\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct MultiToken.Asset\",\"name\":\"credit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum MultiToken.Category\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct MultiToken.Asset\",\"name\":\"collateral\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"originalSourceOfFunds\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repaymentAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceOfFunds\",\"type\":\"address\"}],\"internalType\":\"struct PWNSimpleLoan.LenderSpec\",\"name\":\"lenderSpec\",\"type\":\"tuple\"}],\"name\":\"getLenderSpecHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getStateFingerprint\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hub\",\"outputs\":[{\"internalType\":\"contract PWNHub\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum MultiToken.Category\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct MultiToken.Asset\",\"name\":\"asset\",\"type\":\"tuple\"}],\"name\":\"isValidAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loanMetadataUri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"}],\"name\":\"loanRepaymentAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"loanToken\",\"outputs\":[{\"internalType\":\"contract PWNLOAN\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"compensationAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"compensationAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"duration\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"expiration\",\"type\":\"uint40\"},{\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonceSpace\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"internalType\":\"struct PWNSimpleLoan.ExtensionProposal\",\"name\":\"extension\",\"type\":\"tuple\"}],\"name\":\"makeExtensionProposal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"permitData\",\"type\":\"bytes\"}],\"name\":\"repayLOAN\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revokedNonce\",\"outputs\":[{\"internalType\":\"contract PWNRevokedNonce\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"creditAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"loanOwner\",\"type\":\"address\"}],\"name\":\"tryClaimRepaidLOAN\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Acts as a vault for every loan created by this contract.\",\"errors\":{\"InvalidMultiTokenAsset(uint8,address,uint256,uint256)\":[{\"details\":\"Could be because of invalid category, address, id or amount.\"}],\"InvalidSignature(address,bytes32)\":[{\"details\":\"Thrown when signature is invalid.\"}],\"InvalidSignatureLength(uint256)\":[{\"details\":\"Thrown when signature length is not 64 nor 65 bytes.\"}],\"NonceNotUsable(address,uint256,uint256)\":[{\"details\":\"Maybe nonce is revoked or not in the current nonce space.\"}],\"UnsupportedCategory(uint8)\":[{\"params\":{\"categoryValue\":\"Value of the unsupported category.\"}}]},\"kind\":\"dev\",\"methods\":{\"claimLOAN(uint256)\":{\"details\":\"Only a LOAN token holder can claim a repaid or defaulted loan.      Claim will transfer the repaid credit or collateral to a LOAN token holder address and burn the LOAN token.\",\"params\":{\"loanId\":\"Id of a loan that is being claimed.\"}},\"createLOAN((address,bytes,bytes32[],bytes),(address),(uint256,bool,uint256,bytes),bytes)\":{\"details\":\"The function assumes a prior token approval to a contract address or signed permits.\",\"params\":{\"callerSpec\":\"Caller specification struct.\",\"extra\":\"Auxiliary data that are emitted in the loan creation event. They are not used in the contract logic.\",\"lenderSpec\":\"Lender specification struct.\",\"proposalSpec\":\"Proposal specification struct.\"},\"returns\":{\"loanId\":\"Id of the created LOAN token.\"}},\"extendLOAN((uint256,address,uint256,uint40,uint40,address,uint256,uint256),bytes,bytes)\":{\"details\":\"The function assumes a prior token approval to a contract address or a signed permit.\",\"params\":{\"extension\":\"Extension proposal struct.\",\"permitData\":\"Callers credit permit data.\",\"signature\":\"Signature of the extension proposal.\"}},\"getExtensionHash((uint256,address,uint256,uint40,uint40,address,uint256,uint256))\":{\"params\":{\"extension\":\"Extension proposal struct.\"},\"returns\":{\"_0\":\"Hash of the extension struct.\"}},\"getLOAN(uint256)\":{\"params\":{\"loanId\":\"Id of a loan in question.\"},\"returns\":{\"accruingInterestDailyRate\":\"Daily interest rate in basis points.\",\"borrower\":\"Address of a loan borrower.\",\"collateral\":\"Asset used as a loan collateral. For a definition see { MultiToken dependency lib }.\",\"credit\":\"Asset used as a loan credit. For a definition see { MultiToken dependency lib }.\",\"defaultTimestamp\":\"Unix timestamp (in seconds) of a loan default date.\",\"fixedInterestAmount\":\"Fixed interest amount in credit asset tokens.\",\"loanOwner\":\"Address of a LOAN token holder.\",\"originalLender\":\"Address of a loan original lender.\",\"originalSourceOfFunds\":\"Address of a source of funds for the loan. Original lender address, if the loan was funded directly, or a pool address from witch credit funds were withdrawn / borrowred.\",\"repaymentAmount\":\"Loan repayment amount in credit asset tokens.\",\"startTimestamp\":\"Unix timestamp (in seconds) of a loan creation date.\",\"status\":\"LOAN status.\"}},\"getLenderSpecHash((address))\":{\"params\":{\"lenderSpec\":\"Lender specification struct.\"},\"returns\":{\"_0\":\"Hash of a lender specification.\"}},\"getStateFingerprint(uint256)\":{\"params\":{\"tokenId\":\"Id of a token state in question.\"},\"returns\":{\"_0\":\"Current token state fingerprint.\"}},\"isValidAsset((uint8,address,uint256,uint256))\":{\"details\":\"See MultiToken.isValid for more details.\",\"params\":{\"asset\":\"Asset to be checked.\"},\"returns\":{\"_0\":\"True if the asset is valid.\"}},\"loanMetadataUri()\":{\"returns\":{\"_0\":\"LOAN token metadata uri.\"}},\"loanRepaymentAmount(uint256)\":{\"params\":{\"loanId\":\"Id of a loan.\"},\"returns\":{\"_0\":\"Repayment amount.\"}},\"makeExtensionProposal((uint256,address,uint256,uint40,uint40,address,uint256,uint256))\":{\"params\":{\"extension\":\"Extension proposal struct.\"}},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"details\":\"Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` (i.e. 0xbc197c81, or its own function selector).\",\"returns\":{\"_0\":\"`bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\"}},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"details\":\"Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` (i.e. 0xf23a6e61, or its own function selector).\",\"returns\":{\"_0\":\"`bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\",\"returns\":{\"_0\":\"`IERC721Receiver.onERC721Received.selector` if transfer is allowed\"}},\"repayLOAN(uint256,bytes)\":{\"details\":\"Any address can repay a running loan, but a collateral will be transferred to a borrower address associated with the loan.      If the LOAN token holder is the same as the original lender, the repayment credit asset will be      transferred to the LOAN token holder directly. Otherwise it will transfer the repayment credit asset to      a vault, waiting on a LOAN token holder to claim it. The function assumes a prior token approval to a contract address      or a signed permit.\",\"params\":{\"loanId\":\"Id of a loan that is being repaid.\",\"permitData\":\"Callers credit permit data.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"tryClaimRepaidLOAN(uint256,uint256,address)\":{\"details\":\"The function is called by the vault to repay a loan directly to the original lender or its source of funds      if the loan owner is the original lender. If the transfer fails, the LOAN token will remain in repaid state      and the LOAN token owner will be able to claim the repaid credit. Otherwise lender would be able to prevent      borrower from repaying the loan.\",\"params\":{\"creditAmount\":\"Amount of a credit to be claimed.\",\"loanId\":\"Id of a loan that is being claimed.\",\"loanOwner\":\"Address of the LOAN token holder.\"}}},\"title\":\"PWN Simple Loan\",\"version\":1},\"userdoc\":{\"errors\":{\"AddressMissingHubTag(address,bytes32)\":[{\"notice\":\"Thrown when an address is missing a PWN Hub tag.\"}],\"CallerNotLOANTokenHolder()\":[{\"notice\":\"Thrown when caller is not a LOAN token holder.\"}],\"CallerNotVault()\":[{\"notice\":\"Thrown when caller is not a vault.\"}],\"Expired(uint256,uint256)\":[{\"notice\":\"Thrown when a proposal is expired.\"}],\"IncompleteTransfer()\":[{\"notice\":\"Thrown when an asset transfer is incomplete.\"}],\"InterestAPROutOfBounds(uint256,uint256)\":[{\"notice\":\"Thrown when accruing interest APR is above the maximum.\"}],\"InvalidDuration(uint256,uint256)\":[{\"notice\":\"Thrown when loan duration is below the minimum.\"}],\"InvalidExtensionCaller()\":[{\"notice\":\"Thrown when caller is not a loan borrower or lender.\"}],\"InvalidExtensionDuration(uint256,uint256)\":[{\"notice\":\"Thrown when loan extension duration is out of bounds.\"}],\"InvalidExtensionSigner(address,address)\":[{\"notice\":\"Thrown when signer is not a loan extension proposer.\"}],\"InvalidLenderSpecHash(bytes32,bytes32)\":[{\"notice\":\"Thrown when hash of provided lender spec doesn't match the one in loan terms.\"}],\"InvalidMultiTokenAsset(uint8,address,uint256,uint256)\":[{\"notice\":\"Thrown when MultiToken.Asset is invalid.\"}],\"InvalidPermitAsset(address,address)\":[{\"notice\":\"Thrown when the permit asset is not matching.\"}],\"InvalidPermitOwner(address,address)\":[{\"notice\":\"Thrown when the permit owner is not matching.\"}],\"InvalidSourceOfFunds(address)\":[{\"notice\":\"Thrown when pool based source of funds doesn't have a registered adapter.\"}],\"LoanDefaulted(uint40)\":[{\"notice\":\"Thrown when managed loan is defaulted.\"}],\"LoanNotRunning()\":[{\"notice\":\"Thrown when managed loan is running.\"}],\"LoanRepaid()\":[{\"notice\":\"Thrown when managed loan is repaid.\"}],\"LoanRunning()\":[{\"notice\":\"Thrown when manged loan is still running.\"}],\"NonExistingLoan()\":[{\"notice\":\"Thrown when loan doesn't exist.\"}],\"NonceNotUsable(address,uint256,uint256)\":[{\"notice\":\"Thrown when nonce is currently not usable.\"}],\"RefinanceBorrowerMismatch(address,address)\":[{\"notice\":\"Thrown when refinancing loan terms have different borrower than the original loan.\"}],\"RefinanceCollateralMismatch()\":[{\"notice\":\"Thrown when refinancing loan terms have different collateral asset than the original loan.\"}],\"RefinanceCreditMismatch()\":[{\"notice\":\"Thrown when refinancing loan terms have different credit asset than the original loan.\"}],\"UnsupportedCategory(uint8)\":[{\"notice\":\"Thrown when unsupported category is used.\"}],\"UnsupportedTransferFunction()\":[{\"notice\":\"Thrown when the Vault receives an asset that is not transferred by the Vault itself.\"}]},\"events\":{\"ExtensionProposalMade(bytes32,address,(uint256,address,uint256,uint40,uint40,address,uint256,uint256))\":{\"notice\":\"Emitted when a loan extension proposal is made.\"},\"LOANClaimed(uint256,bool)\":{\"notice\":\"Emitted when a repaid or defaulted loan is claimed.\"},\"LOANCreated(uint256,bytes32,address,(address,address,uint32,(uint8,address,uint256,uint256),(uint8,address,uint256,uint256),uint256,uint40,bytes32,bytes32),(address),bytes)\":{\"notice\":\"Emitted when a new loan in created.\"},\"LOANExtended(uint256,uint40,uint40)\":{\"notice\":\"Emitted when a LOAN token holder extends a loan.\"},\"LOANPaidBack(uint256)\":{\"notice\":\"Emitted when a loan is paid back.\"},\"LOANRefinanced(uint256,uint256)\":{\"notice\":\"Emitted when a loan is refinanced.\"},\"PoolSupply((uint8,address,uint256,uint256),address,address,address)\":{\"notice\":\"Emitted when asset is supplied to a pool from a vault.\"},\"PoolWithdraw((uint8,address,uint256,uint256),address,address,address)\":{\"notice\":\"Emitted when asset is withdrawn from a pool to an `owner` address.\"},\"VaultPull((uint8,address,uint256,uint256),address)\":{\"notice\":\"Emitted when asset transfer happens from an `origin` address to a vault.\"},\"VaultPush((uint8,address,uint256,uint256),address)\":{\"notice\":\"Emitted when asset transfer happens from a vault to a `beneficiary` address.\"},\"VaultPushFrom((uint8,address,uint256,uint256),address,address)\":{\"notice\":\"Emitted when asset transfer happens from an `origin` address to a `beneficiary` address.\"}},\"kind\":\"user\",\"methods\":{\"claimLOAN(uint256)\":{\"notice\":\"Claim a repaid or defaulted loan.\"},\"createLOAN((address,bytes,bytes32[],bytes),(address),(uint256,bool,uint256,bytes),bytes)\":{\"notice\":\"Create a new loan.\"},\"extendLOAN((uint256,address,uint256,uint40,uint40,address,uint256,uint256),bytes,bytes)\":{\"notice\":\"Extend loans default date with signed extension proposal signed by borrower or LOAN token owner.\"},\"extensionProposalsMade(bytes32)\":{\"notice\":\"Mapping of extension proposals made via on-chain transaction by extension hash.\"},\"getExtensionHash((uint256,address,uint256,uint40,uint40,address,uint256,uint256))\":{\"notice\":\"Get the hash of the extension struct.\"},\"getLOAN(uint256)\":{\"notice\":\"Return a LOAN data struct associated with a loan id.\"},\"getLenderSpecHash((address))\":{\"notice\":\"Get hash of a lender specification.\"},\"getStateFingerprint(uint256)\":{\"notice\":\"Function to return current token state fingerprint.\"},\"isValidAsset((uint8,address,uint256,uint256))\":{\"notice\":\"Check if the asset is valid with the MultiToken dependency lib and the category registry.\"},\"loanMetadataUri()\":{\"notice\":\"Get a loan metadata uri for a LOAN token minted by this contract.\"},\"loanRepaymentAmount(uint256)\":{\"notice\":\"Calculate the loan repayment amount with fixed and accrued interest.\"},\"makeExtensionProposal((uint256,address,uint256,uint40,uint40,address,uint256,uint256))\":{\"notice\":\"Make an on-chain extension proposal.\"},\"repayLOAN(uint256,bytes)\":{\"notice\":\"Repay running loan.\"},\"tryClaimRepaidLOAN(uint256,uint256,address)\":{\"notice\":\"Try to claim a repaid loan for the loan owner.\"}},\"notice\":\"Contract managing a simple loan in PWN protocol.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/loan/terms/simple/loan/PWNSimpleLoan.sol\":\"PWNSimpleLoan\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":MultiToken/=lib/MultiToken/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pwn/=src/\"]},\"sources\":{\"lib/MultiToken/src/MultiToken.sol\":{\"keccak256\":\"0xc82d7bddc1a925316875bfe3bf116cb8deacc2c6296fad57b1895db898bf871e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://587293f9235d52ab6f51c794ed68e8828eaa4f8b073fa191556fff37446be10c\",\"dweb:/ipfs/QmdFay286V8GfHZDE7TFDxh9irQsmNDwP4tQFbno49waxY\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0xde231558366826d7cb61725af8147965a61c53b77a352cc8c9af38fc5a92ac3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd55624076bf61d44af5ff351919e32dda748567acfbdd6ba3d6c7be61c758e\",\"dweb:/ipfs/QmSki4dTrf4GPm7MTpG3fk8mC7rnjwd2zMomLp6jLuF63Q\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol\":{\"keccak256\":\"0x10a6688bc4154b1b76268dbaf497bd8b24f77525ecb9cf829bd3cccec98eefc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://68663f939b79e88a5bb677cf6c549e88eb4f587379c09f80d19cde14b0eb984b\",\"dweb:/ipfs/QmVfeL1uxQ5161d25DsNqptjaur7VQugjCSGitrRscTdmV\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c45b821ef9e882e57c256697a152e108f0f2ad6997609af8904cae99c9bd422e\",\"dweb:/ipfs/QmRKCJW6jjzR5UYZcLpGnhEJ75UVbH6EHkEa49sWx2SKng\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0x6ebf1944ab804b8660eb6fc52f9fe84588cee01c2566a69023e59497e7d27f45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2900536cdadec954ced8789a9d1ed4b5e640029e1424e91fd5b88026486f4d45\",\"dweb:/ipfs/QmUMUX7CuYoiHvFkhifqtXGaciw2wnm4t9sAoPzETZ3Gbq\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol\":{\"keccak256\":\"0xaf297d12d8d4a57fe01a70f0ef38908f208e3faedc577056d0b728fa2f3ccf0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fbfaf37123958822a2720a4ea29651be00edab787540b770f73d3e025d286ff8\",\"dweb:/ipfs/QmbzgWeTm8hJVUqWrNAwFjshqbYVyeGpQA8D1huzxQdmw6\"]},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://720d6bb56ea0c4ef781c0bd65c5bd0541f5a46100163b2587170f97658d2deed\",\"dweb:/ipfs/QmTS2biLVPrv8CeeXCaKmkFxonMiRvc1LxiYBRYDAJHQUS\"]},\"lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol\":{\"keccak256\":\"0xcab667ddad478ff0d39c2053ca77fac778af8483c18ab07d810277b4216fd582\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://919c7ea27c77275c3c341da0c4a26a66a20ed27605fbe8becf11f58ec3bc65bf\",\"dweb:/ipfs/QmRLKyVE2n7e2Jo4bLNn8eLgqqhNGYnVQyjJPWdr8poskf\"]},\"lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0xeb373f1fdc7b755c6a750123a9b9e3a8a02c1470042fd6505d875000a80bde0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e28648f994abf1d6bc345644a361cc0b7efa544f8bc0c8ec26011fed85a91ec\",\"dweb:/ipfs/QmVVE7AiRjKaQYYji7TkjmTeVzGpNmms5eoxqTCfvvpj6D\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71\",\"dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68\",\"dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005\",\"dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8b93a1e39a4a19eba1600b92c96f435442db88cac91e315c8291547a2a7bcfe2\",\"dweb:/ipfs/QmTm34KVe6uZBZwq8dZDNWwPcm24qBJdxqL3rPxBJ4LrMv\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04\",\"dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0x5a08ad61f4e82b8a3323562661a86fb10b10190848073fdc13d4ac43710ffba5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f7bb74cf88fd88daa34e118bc6e363381d05044f34f391d39a10c0c9dac3ebd\",\"dweb:/ipfs/QmNbQ3v8v4zuDtg7VeLAbdhAm3tCzUodNoDZZ8ekmCHWZX\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278\",\"dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]},\"src/PWNErrors.sol\":{\"keccak256\":\"0x8a0e516fc8ddf54aecb82d5cbd19b6f263950a91d4411d1d4c54b90fae010692\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://b9cd08003376c48cdaf6279c4237a38efb1e26080bc29de3343bcfe397a4bb0f\",\"dweb:/ipfs/QmXtMtn71ZzRu1rGQLq8u5vnDy4k462d7mGtu1jFd7ZBJG\"]},\"src/config/PWNConfig.sol\":{\"keccak256\":\"0x15a2ab788f84df29b960d50b33803130bdd61fe7c0ce76d4f6bf76da7cccb594\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://b1310535db741a5a7a0aff71f34ef329c7f5bf3117f9c38587e4090bec340fb4\",\"dweb:/ipfs/QmYRWwiSAyZMdxSqMYU1K2YRFzBW7L2dHXktx1BdFW9fP5\"]},\"src/hub/PWNHub.sol\":{\"keccak256\":\"0x92ad9edafc151bc7efc1b132c1be55966bb692860a94803a74ce5a948985126c\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://a04dbfe0ea39f7cd04b7947cac66ce77745ecc20a24aad3f8d35a6d319eec202\",\"dweb:/ipfs/QmbxoqEtL4YwMQDfCydurWLHeVjL1Yjc4Ty4vsRoCqXabv\"]},\"src/hub/PWNHubAccessControl.sol\":{\"keccak256\":\"0x310e0389c98971c4d6c25d8756c1e8a962c8b22c54e3ce6d80a383fb5b755448\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://63748084b8c8a9e2cce98a87d27a8baf353fae903641d6fdfc2cdc4ed229243f\",\"dweb:/ipfs/QmVywLNCBeWkNdWjpdumnAam1Shwj8k3DxxpRcWAK997Nw\"]},\"src/hub/PWNHubTags.sol\":{\"keccak256\":\"0xd1e685e8075f1f16835d38cfe39b1eee9edbf75089a0109002f7b2bfe14c177a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://4a01df6b1c2cf493017b7abb4b9ec6ac16c9b1c3498b16ccbdc4f2045909dde8\",\"dweb:/ipfs/QmcYEgSZrE33YKxDDBvhVgZTfT9Tj1RTEX3iA717zZyspJ\"]},\"src/interfaces/ICryptoKitties.sol\":{\"keccak256\":\"0x9aaa7f948d4f2121d764b5664fe1c8431b3c5bfce780228eceb56d1589681706\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05416e111c8ff6a1464248ac387e8c69015c355e949967586d514d9d17d619aa\",\"dweb:/ipfs/QmVK5Q6bS1CevgdxB17RJ9BGZsspCXdY5Y5dX4cpgQ4Rze\"]},\"src/interfaces/IERC5646.sol\":{\"keccak256\":\"0xff5ce494375d2cf5a67fe9460ea66aa3572b8a0434ae538cbac0a55f7aac5c5e\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://e8e2b472fa80a92ae12985da77056f68f0e0f36fca7ac37b6d30db82a2527180\",\"dweb:/ipfs/QmdFTGSCaPcVfthbGSUuiyhivqBx6xN9dCL14PCbR39Wki\"]},\"src/interfaces/IMultiTokenCategoryRegistry.sol\":{\"keccak256\":\"0x5607c7415785a07c7226638ab7d16ae9a87906e5eafb06e723944144b8f7c48a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd5f1d39f2acb6cda18a1199e06be211deccce27478de077d942ced8ada6e0b1\",\"dweb:/ipfs/Qmdx2uXjyoyyqNQU5aQTpagujxSVAfS17Sc3ziJGAofXnX\"]},\"src/interfaces/IPWNLoanMetadataProvider.sol\":{\"keccak256\":\"0x6cc991fd9c8c88e0a69e835fcd514868836e2432b12454dfcb6a681a3a9d13b8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://69fd07433fd7eb2f1474d778476240434fa79a31525341d88a588573562389c6\",\"dweb:/ipfs/Qmb6gWNQD96oSgwH5Yf6eMHxYWXZwCPrd7MvK86r7UKhZK\"]},\"src/interfaces/IPoolAdapter.sol\":{\"keccak256\":\"0xe0309b4e7da2046095c7dc943d953f32d2a46b0ad64beaf3f4ed1b440fe43f89\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://15870bf95e096b35620787a0eba49f7becbaff738651a83bd28310d022cdc93b\",\"dweb:/ipfs/QmZPYmxrjB6SFWr5arTztrDofQ6XdyzXTUMeaQt5wcbv3T\"]},\"src/interfaces/IStateFingerpringComputer.sol\":{\"keccak256\":\"0xb2f72031bdd6b6ac7179ca9af90c290d37bcc43d6bab4db6e0b1ee7c7b4f72a2\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://d8de3c648f1afab5458e553042a59b0df3d8d54be1a488e891de70821745da0c\",\"dweb:/ipfs/QmQ6QoeMgZGdVjJ2aAt8t1AuBCJ95m6BRSR1GKRqVk4jct\"]},\"src/loan/lib/PWNFeeCalculator.sol\":{\"keccak256\":\"0xab8eb0be2d2e5a7c909a326de53459ae2ed6fd7cdd3985719515f279f952fcdf\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://4ca7a9d230ab90b46cdb1a16bd99af5639af7adcf2250a20b7e1f77c952344f5\",\"dweb:/ipfs/QmXzwraVHPmrVFtR4tkm5JqafygeDDvbQbkKu33EYUWLMq\"]},\"src/loan/lib/PWNSignatureChecker.sol\":{\"keccak256\":\"0xb76220c904f1b4c9e08166c4175746b161aaf70be14dc22b1a335f351970d1fd\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://846d1cc6b7f1ba8b0bc6b5836aad018828bc1ad8f6f994ec59d24f6617d91fc1\",\"dweb:/ipfs/QmWe7cAsDysa6Qjn9vBAiHW4iaPmZnaeVmqxnwRMikgSCM\"]},\"src/loan/terms/simple/loan/PWNSimpleLoan.sol\":{\"keccak256\":\"0x6dd44efd796277aeb5a7712591cfbee10ea3058c0f8f97f9c6111297714d3155\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://0a65b5a30ea71966c8deaa54f621985568fbcbe37bcb6174219410837c9722d9\",\"dweb:/ipfs/QmWzCC35n2a2GsqEkU27i1LKGjqhYTZ1wLfEBnUxsPRrfr\"]},\"src/loan/terms/simple/proposal/PWNSimpleLoanProposal.sol\":{\"keccak256\":\"0xa0569c9949bfcd4995d813e1bfe3cb89dcf55293e2fb7728ade49d49be1c6d2d\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://d94dc60f4f6591cac65d95bea69a8b6364589977b085892f334e4224ce3b754d\",\"dweb:/ipfs/QmV3NaHYz3bNbXsKbrHEJxBuLHJyStB6917hJ1D7dtqhs5\"]},\"src/loan/token/PWNLOAN.sol\":{\"keccak256\":\"0x92981fb0bd0abcadc45b0f88bfc5fcc960ce7a5b79494fc6c9fd5990b197c764\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://e10726f492991694d751b68bf87a352f1284710ba311614295381a58ebfd226e\",\"dweb:/ipfs/Qmct6PYHSqHo9K9rGAif9ohBpJuQnTBWdHJRdENpetGg7k\"]},\"src/loan/vault/PWNVault.sol\":{\"keccak256\":\"0x00f3a6cad5f19a0a818d351a5aa849e41a34bf0251a872d4993d40d77468f29e\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://01942d7d871fe64f229820f5f90be23b647e438d951531a5f60a470f8093977e\",\"dweb:/ipfs/QmcyDXfCdgSQ8P454JxfuTzNBSxfpzeJ9aTPBefTH3dTvK\"]},\"src/loan/vault/Permit.sol\":{\"keccak256\":\"0xce0acf24731cfaa49535adea5c0c6ebade736d35f3f54a8150ef175a693e3cee\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://3542ad1e3295c63363fe825d3e46ad447fcd614f31f4dadeea39d24086e02c7a\",\"dweb:/ipfs/QmVjAuaQ1UdqgJAmvR8pdXQCb3Zy7fDQeBtbx9ZTbCQic4\"]},\"src/nonce/PWNRevokedNonce.sol\":{\"keccak256\":\"0xc0c75afa97243c3ef711e04cc9ffd0b3d44fa7999333b0048dc37b562a4cc06e\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://5b2b7271b9505f35a05d2d68803f20116b621dcecfc528806225e0280b0a420e\",\"dweb:/ipfs/QmZh95WUcgTHz7ifsQhmrq1wCjvDXfwwh9G7k49otPisxx\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.16+commit.07a7930e"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_hub",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_loanToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_config",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_revokedNonce",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "_categoryRegistry",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "addr",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "tag",
              "type": "bytes32"
            }
          ],
          "type": "error",
          "name": "AddressMissingHubTag"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "CallerNotLOANTokenHolder"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "CallerNotVault"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "current",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "expiration",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "Expired"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "IncompleteTransfer"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "current",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limit",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "InterestAPROutOfBounds"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "current",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limit",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "InvalidDuration"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidExtensionCaller"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limit",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "InvalidExtensionDuration"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "allowed",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "current",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "InvalidExtensionSigner"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "current",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "expected",
              "type": "bytes32"
            }
          ],
          "type": "error",
          "name": "InvalidLenderSpecHash"
        },
        {
          "inputs": [
            {
              "internalType": "uint8",
              "name": "category",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "addr",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "InvalidMultiTokenAsset"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "current",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "expected",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "InvalidPermitAsset"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "current",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "expected",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "InvalidPermitOwner"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "signer",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "digest",
              "type": "bytes32"
            }
          ],
          "type": "error",
          "name": "InvalidSignature"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "length",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "InvalidSignatureLength"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "sourceOfFunds",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "InvalidSourceOfFunds"
        },
        {
          "inputs": [
            {
              "internalType": "uint40",
              "name": "",
              "type": "uint40"
            }
          ],
          "type": "error",
          "name": "LoanDefaulted"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "LoanNotRunning"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "LoanRepaid"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "LoanRunning"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "NonExistingLoan"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "addr",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonceSpace",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "NonceNotUsable"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "currentBorrower",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "newBorrower",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "RefinanceBorrowerMismatch"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "RefinanceCollateralMismatch"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "RefinanceCreditMismatch"
        },
        {
          "inputs": [
            {
              "internalType": "uint8",
              "name": "categoryValue",
              "type": "uint8"
            }
          ],
          "type": "error",
          "name": "UnsupportedCategory"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "UnsupportedTransferFunction"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "extensionHash",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "proposer",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "struct PWNSimpleLoan.ExtensionProposal",
              "name": "proposal",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "loanId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "compensationAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "compensationAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint40",
                  "name": "duration",
                  "type": "uint40"
                },
                {
                  "internalType": "uint40",
                  "name": "expiration",
                  "type": "uint40"
                },
                {
                  "internalType": "address",
                  "name": "proposer",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonceSpace",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                }
              ],
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ExtensionProposalMade",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "bool",
              "name": "defaulted",
              "type": "bool",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "LOANClaimed",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "bytes32",
              "name": "proposalHash",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "proposalContract",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "struct PWNSimpleLoan.Terms",
              "name": "terms",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "lender",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "borrower",
                  "type": "address"
                },
                {
                  "internalType": "uint32",
                  "name": "duration",
                  "type": "uint32"
                },
                {
                  "internalType": "struct MultiToken.Asset",
                  "name": "collateral",
                  "type": "tuple",
                  "components": [
                    {
                      "internalType": "enum MultiToken.Category",
                      "name": "category",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "assetAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "id",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    }
                  ]
                },
                {
                  "internalType": "struct MultiToken.Asset",
                  "name": "credit",
                  "type": "tuple",
                  "components": [
                    {
                      "internalType": "enum MultiToken.Category",
                      "name": "category",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address",
                      "name": "assetAddress",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "id",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "amount",
                      "type": "uint256"
                    }
                  ]
                },
                {
                  "internalType": "uint256",
                  "name": "fixedInterestAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint40",
                  "name": "accruingInterestAPR",
                  "type": "uint40"
                },
                {
                  "internalType": "bytes32",
                  "name": "lenderSpecHash",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "borrowerSpecHash",
                  "type": "bytes32"
                }
              ],
              "indexed": false
            },
            {
              "internalType": "struct PWNSimpleLoan.LenderSpec",
              "name": "lenderSpec",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "sourceOfFunds",
                  "type": "address"
                }
              ],
              "indexed": false
            },
            {
              "internalType": "bytes",
              "name": "extra",
              "type": "bytes",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "LOANCreated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint40",
              "name": "originalDefaultTimestamp",
              "type": "uint40",
              "indexed": false
            },
            {
              "internalType": "uint40",
              "name": "extendedDefaultTimestamp",
              "type": "uint40",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "LOANExtended",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "LOANPaidBack",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "refinancedLoanId",
              "type": "uint256",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "LOANRefinanced",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "struct MultiToken.Asset",
              "name": "asset",
              "type": "tuple",
              "components": [
                {
                  "internalType": "enum MultiToken.Category",
                  "name": "category",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "assetAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "poolAdapter",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "pool",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "PoolSupply",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "struct MultiToken.Asset",
              "name": "asset",
              "type": "tuple",
              "components": [
                {
                  "internalType": "enum MultiToken.Category",
                  "name": "category",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "assetAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "poolAdapter",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "pool",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "PoolWithdraw",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "struct MultiToken.Asset",
              "name": "asset",
              "type": "tuple",
              "components": [
                {
                  "internalType": "enum MultiToken.Category",
                  "name": "category",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "assetAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "origin",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "VaultPull",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "struct MultiToken.Asset",
              "name": "asset",
              "type": "tuple",
              "components": [
                {
                  "internalType": "enum MultiToken.Category",
                  "name": "category",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "assetAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "beneficiary",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "VaultPush",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "struct MultiToken.Asset",
              "name": "asset",
              "type": "tuple",
              "components": [
                {
                  "internalType": "enum MultiToken.Category",
                  "name": "category",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "assetAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "indexed": false
            },
            {
              "internalType": "address",
              "name": "origin",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "beneficiary",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "VaultPushFrom",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "APR_INTEREST_DENOMINATOR",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "APR_TO_DAILY_INTEREST_DENOMINATOR",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "APR_TO_DAILY_INTEREST_NUMERATOR",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "DAILY_INTEREST_DENOMINATOR",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "DOMAIN_SEPARATOR",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "EXTENSION_PROPOSAL_TYPEHASH",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "MAX_ACCRUING_INTEREST_APR",
          "outputs": [
            {
              "internalType": "uint40",
              "name": "",
              "type": "uint40"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "MAX_EXTENSION_DURATION",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "MIN_EXTENSION_DURATION",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "MIN_LOAN_DURATION",
          "outputs": [
            {
              "internalType": "uint32",
              "name": "",
              "type": "uint32"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "VERSION",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "categoryRegistry",
          "outputs": [
            {
              "internalType": "contract IMultiTokenCategoryRegistry",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "claimLOAN"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "config",
          "outputs": [
            {
              "internalType": "contract PWNConfig",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct PWNSimpleLoan.ProposalSpec",
              "name": "proposalSpec",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "proposalContract",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "proposalData",
                  "type": "bytes"
                },
                {
                  "internalType": "bytes32[]",
                  "name": "proposalInclusionProof",
                  "type": "bytes32[]"
                },
                {
                  "internalType": "bytes",
                  "name": "signature",
                  "type": "bytes"
                }
              ]
            },
            {
              "internalType": "struct PWNSimpleLoan.LenderSpec",
              "name": "lenderSpec",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "sourceOfFunds",
                  "type": "address"
                }
              ]
            },
            {
              "internalType": "struct PWNSimpleLoan.CallerSpec",
              "name": "callerSpec",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "refinancingLoanId",
                  "type": "uint256"
                },
                {
                  "internalType": "bool",
                  "name": "revokeNonce",
                  "type": "bool"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "permitData",
                  "type": "bytes"
                }
              ]
            },
            {
              "internalType": "bytes",
              "name": "extra",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "createLOAN",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct PWNSimpleLoan.ExtensionProposal",
              "name": "extension",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "loanId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "compensationAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "compensationAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint40",
                  "name": "duration",
                  "type": "uint40"
                },
                {
                  "internalType": "uint40",
                  "name": "expiration",
                  "type": "uint40"
                },
                {
                  "internalType": "address",
                  "name": "proposer",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonceSpace",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                }
              ]
            },
            {
              "internalType": "bytes",
              "name": "signature",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "permitData",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "extendLOAN"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "extensionProposalsMade",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct PWNSimpleLoan.ExtensionProposal",
              "name": "extension",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "loanId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "compensationAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "compensationAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint40",
                  "name": "duration",
                  "type": "uint40"
                },
                {
                  "internalType": "uint40",
                  "name": "expiration",
                  "type": "uint40"
                },
                {
                  "internalType": "address",
                  "name": "proposer",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonceSpace",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                }
              ]
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getExtensionHash",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getLOAN",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "status",
              "type": "uint8"
            },
            {
              "internalType": "uint40",
              "name": "startTimestamp",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "defaultTimestamp",
              "type": "uint40"
            },
            {
              "internalType": "address",
              "name": "borrower",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "originalLender",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "loanOwner",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "accruingInterestDailyRate",
              "type": "uint40"
            },
            {
              "internalType": "uint256",
              "name": "fixedInterestAmount",
              "type": "uint256"
            },
            {
              "internalType": "struct MultiToken.Asset",
              "name": "credit",
              "type": "tuple",
              "components": [
                {
                  "internalType": "enum MultiToken.Category",
                  "name": "category",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "assetAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ]
            },
            {
              "internalType": "struct MultiToken.Asset",
              "name": "collateral",
              "type": "tuple",
              "components": [
                {
                  "internalType": "enum MultiToken.Category",
                  "name": "category",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "assetAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ]
            },
            {
              "internalType": "address",
              "name": "originalSourceOfFunds",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "repaymentAmount",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct PWNSimpleLoan.LenderSpec",
              "name": "lenderSpec",
              "type": "tuple",
              "components": [
                {
                  "internalType": "address",
                  "name": "sourceOfFunds",
                  "type": "address"
                }
              ]
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "getLenderSpecHash",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getStateFingerprint",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "hub",
          "outputs": [
            {
              "internalType": "contract PWNHub",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct MultiToken.Asset",
              "name": "asset",
              "type": "tuple",
              "components": [
                {
                  "internalType": "enum MultiToken.Category",
                  "name": "category",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "assetAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ]
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "isValidAsset",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "loanMetadataUri",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "loanRepaymentAmount",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "loanToken",
          "outputs": [
            {
              "internalType": "contract PWNLOAN",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "struct PWNSimpleLoan.ExtensionProposal",
              "name": "extension",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "loanId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "compensationAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "compensationAmount",
                  "type": "uint256"
                },
                {
                  "internalType": "uint40",
                  "name": "duration",
                  "type": "uint40"
                },
                {
                  "internalType": "uint40",
                  "name": "expiration",
                  "type": "uint40"
                },
                {
                  "internalType": "address",
                  "name": "proposer",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "nonceSpace",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "nonce",
                  "type": "uint256"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "makeExtensionProposal"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256[]",
              "name": "",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "",
              "type": "uint256[]"
            },
            {
              "internalType": "bytes",
              "name": "",
              "type": "bytes"
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "onERC1155BatchReceived",
          "outputs": [
            {
              "internalType": "bytes4",
              "name": "",
              "type": "bytes4"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "",
              "type": "bytes"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "onERC1155Received",
          "outputs": [
            {
              "internalType": "bytes4",
              "name": "",
              "type": "bytes4"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "operator",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "",
              "type": "bytes"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "onERC721Received",
          "outputs": [
            {
              "internalType": "bytes4",
              "name": "",
              "type": "bytes4"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "permitData",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "repayLOAN"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "revokedNonce",
          "outputs": [
            {
              "internalType": "contract PWNRevokedNonce",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "bytes4",
              "name": "interfaceId",
              "type": "bytes4"
            }
          ],
          "stateMutability": "pure",
          "type": "function",
          "name": "supportsInterface",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "loanId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "creditAmount",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "loanOwner",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "tryClaimRepaidLOAN"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "claimLOAN(uint256)": {
            "details": "Only a LOAN token holder can claim a repaid or defaulted loan.      Claim will transfer the repaid credit or collateral to a LOAN token holder address and burn the LOAN token.",
            "params": {
              "loanId": "Id of a loan that is being claimed."
            }
          },
          "createLOAN((address,bytes,bytes32[],bytes),(address),(uint256,bool,uint256,bytes),bytes)": {
            "details": "The function assumes a prior token approval to a contract address or signed permits.",
            "params": {
              "callerSpec": "Caller specification struct.",
              "extra": "Auxiliary data that are emitted in the loan creation event. They are not used in the contract logic.",
              "lenderSpec": "Lender specification struct.",
              "proposalSpec": "Proposal specification struct."
            },
            "returns": {
              "loanId": "Id of the created LOAN token."
            }
          },
          "extendLOAN((uint256,address,uint256,uint40,uint40,address,uint256,uint256),bytes,bytes)": {
            "details": "The function assumes a prior token approval to a contract address or a signed permit.",
            "params": {
              "extension": "Extension proposal struct.",
              "permitData": "Callers credit permit data.",
              "signature": "Signature of the extension proposal."
            }
          },
          "getExtensionHash((uint256,address,uint256,uint40,uint40,address,uint256,uint256))": {
            "params": {
              "extension": "Extension proposal struct."
            },
            "returns": {
              "_0": "Hash of the extension struct."
            }
          },
          "getLOAN(uint256)": {
            "params": {
              "loanId": "Id of a loan in question."
            },
            "returns": {
              "accruingInterestDailyRate": "Daily interest rate in basis points.",
              "borrower": "Address of a loan borrower.",
              "collateral": "Asset used as a loan collateral. For a definition see { MultiToken dependency lib }.",
              "credit": "Asset used as a loan credit. For a definition see { MultiToken dependency lib }.",
              "defaultTimestamp": "Unix timestamp (in seconds) of a loan default date.",
              "fixedInterestAmount": "Fixed interest amount in credit asset tokens.",
              "loanOwner": "Address of a LOAN token holder.",
              "originalLender": "Address of a loan original lender.",
              "originalSourceOfFunds": "Address of a source of funds for the loan. Original lender address, if the loan was funded directly, or a pool address from witch credit funds were withdrawn / borrowred.",
              "repaymentAmount": "Loan repayment amount in credit asset tokens.",
              "startTimestamp": "Unix timestamp (in seconds) of a loan creation date.",
              "status": "LOAN status."
            }
          },
          "getLenderSpecHash((address))": {
            "params": {
              "lenderSpec": "Lender specification struct."
            },
            "returns": {
              "_0": "Hash of a lender specification."
            }
          },
          "getStateFingerprint(uint256)": {
            "params": {
              "tokenId": "Id of a token state in question."
            },
            "returns": {
              "_0": "Current token state fingerprint."
            }
          },
          "isValidAsset((uint8,address,uint256,uint256))": {
            "details": "See MultiToken.isValid for more details.",
            "params": {
              "asset": "Asset to be checked."
            },
            "returns": {
              "_0": "True if the asset is valid."
            }
          },
          "loanMetadataUri()": {
            "returns": {
              "_0": "LOAN token metadata uri."
            }
          },
          "loanRepaymentAmount(uint256)": {
            "params": {
              "loanId": "Id of a loan."
            },
            "returns": {
              "_0": "Repayment amount."
            }
          },
          "makeExtensionProposal((uint256,address,uint256,uint40,uint40,address,uint256,uint256))": {
            "params": {
              "extension": "Extension proposal struct."
            }
          },
          "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": {
            "details": "Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` (i.e. 0xbc197c81, or its own function selector).",
            "returns": {
              "_0": "`bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed"
            }
          },
          "onERC1155Received(address,address,uint256,uint256,bytes)": {
            "details": "Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` (i.e. 0xf23a6e61, or its own function selector).",
            "returns": {
              "_0": "`bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed"
            }
          },
          "onERC721Received(address,address,uint256,bytes)": {
            "details": "Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} by `operator` from `from`, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.",
            "returns": {
              "_0": "`IERC721Receiver.onERC721Received.selector` if transfer is allowed"
            }
          },
          "repayLOAN(uint256,bytes)": {
            "details": "Any address can repay a running loan, but a collateral will be transferred to a borrower address associated with the loan.      If the LOAN token holder is the same as the original lender, the repayment credit asset will be      transferred to the LOAN token holder directly. Otherwise it will transfer the repayment credit asset to      a vault, waiting on a LOAN token holder to claim it. The function assumes a prior token approval to a contract address      or a signed permit.",
            "params": {
              "loanId": "Id of a loan that is being repaid.",
              "permitData": "Callers credit permit data."
            }
          },
          "supportsInterface(bytes4)": {
            "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas."
          },
          "tryClaimRepaidLOAN(uint256,uint256,address)": {
            "details": "The function is called by the vault to repay a loan directly to the original lender or its source of funds      if the loan owner is the original lender. If the transfer fails, the LOAN token will remain in repaid state      and the LOAN token owner will be able to claim the repaid credit. Otherwise lender would be able to prevent      borrower from repaying the loan.",
            "params": {
              "creditAmount": "Amount of a credit to be claimed.",
              "loanId": "Id of a loan that is being claimed.",
              "loanOwner": "Address of the LOAN token holder."
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "claimLOAN(uint256)": {
            "notice": "Claim a repaid or defaulted loan."
          },
          "createLOAN((address,bytes,bytes32[],bytes),(address),(uint256,bool,uint256,bytes),bytes)": {
            "notice": "Create a new loan."
          },
          "extendLOAN((uint256,address,uint256,uint40,uint40,address,uint256,uint256),bytes,bytes)": {
            "notice": "Extend loans default date with signed extension proposal signed by borrower or LOAN token owner."
          },
          "extensionProposalsMade(bytes32)": {
            "notice": "Mapping of extension proposals made via on-chain transaction by extension hash."
          },
          "getExtensionHash((uint256,address,uint256,uint40,uint40,address,uint256,uint256))": {
            "notice": "Get the hash of the extension struct."
          },
          "getLOAN(uint256)": {
            "notice": "Return a LOAN data struct associated with a loan id."
          },
          "getLenderSpecHash((address))": {
            "notice": "Get hash of a lender specification."
          },
          "getStateFingerprint(uint256)": {
            "notice": "Function to return current token state fingerprint."
          },
          "isValidAsset((uint8,address,uint256,uint256))": {
            "notice": "Check if the asset is valid with the MultiToken dependency lib and the category registry."
          },
          "loanMetadataUri()": {
            "notice": "Get a loan metadata uri for a LOAN token minted by this contract."
          },
          "loanRepaymentAmount(uint256)": {
            "notice": "Calculate the loan repayment amount with fixed and accrued interest."
          },
          "makeExtensionProposal((uint256,address,uint256,uint40,uint40,address,uint256,uint256))": {
            "notice": "Make an on-chain extension proposal."
          },
          "repayLOAN(uint256,bytes)": {
            "notice": "Repay running loan."
          },
          "tryClaimRepaidLOAN(uint256,uint256,address)": {
            "notice": "Try to claim a repaid loan for the loan owner."
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "MultiToken/=lib/MultiToken/src/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "openzeppelin/=lib/openzeppelin-contracts/contracts/",
        "pwn/=src/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/loan/terms/simple/loan/PWNSimpleLoan.sol": "PWNSimpleLoan"
      },
      "libraries": {}
    },
    "sources": {
      "lib/MultiToken/src/MultiToken.sol": {
        "keccak256": "0xc82d7bddc1a925316875bfe3bf116cb8deacc2c6296fad57b1895db898bf871e",
        "urls": [
          "bzz-raw://587293f9235d52ab6f51c794ed68e8828eaa4f8b073fa191556fff37446be10c",
          "dweb:/ipfs/QmdFay286V8GfHZDE7TFDxh9irQsmNDwP4tQFbno49waxY"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
        "keccak256": "0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218",
        "urls": [
          "bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32",
          "dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
        "keccak256": "0xde231558366826d7cb61725af8147965a61c53b77a352cc8c9af38fc5a92ac3c",
        "urls": [
          "bzz-raw://1fd55624076bf61d44af5ff351919e32dda748567acfbdd6ba3d6c7be61c758e",
          "dweb:/ipfs/QmSki4dTrf4GPm7MTpG3fk8mC7rnjwd2zMomLp6jLuF63Q"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol": {
        "keccak256": "0x10a6688bc4154b1b76268dbaf497bd8b24f77525ecb9cf829bd3cccec98eefc2",
        "urls": [
          "bzz-raw://68663f939b79e88a5bb677cf6c549e88eb4f587379c09f80d19cde14b0eb984b",
          "dweb:/ipfs/QmVfeL1uxQ5161d25DsNqptjaur7VQugjCSGitrRscTdmV"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol": {
        "keccak256": "0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544",
        "urls": [
          "bzz-raw://c45b821ef9e882e57c256697a152e108f0f2ad6997609af8904cae99c9bd422e",
          "dweb:/ipfs/QmRKCJW6jjzR5UYZcLpGnhEJ75UVbH6EHkEa49sWx2SKng"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol": {
        "keccak256": "0x6ebf1944ab804b8660eb6fc52f9fe84588cee01c2566a69023e59497e7d27f45",
        "urls": [
          "bzz-raw://2900536cdadec954ced8789a9d1ed4b5e640029e1424e91fd5b88026486f4d45",
          "dweb:/ipfs/QmUMUX7CuYoiHvFkhifqtXGaciw2wnm4t9sAoPzETZ3Gbq"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol": {
        "keccak256": "0xaf297d12d8d4a57fe01a70f0ef38908f208e3faedc577056d0b728fa2f3ccf0c",
        "urls": [
          "bzz-raw://fbfaf37123958822a2720a4ea29651be00edab787540b770f73d3e025d286ff8",
          "dweb:/ipfs/QmbzgWeTm8hJVUqWrNAwFjshqbYVyeGpQA8D1huzxQdmw6"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol": {
        "keccak256": "0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6",
        "urls": [
          "bzz-raw://720d6bb56ea0c4ef781c0bd65c5bd0541f5a46100163b2587170f97658d2deed",
          "dweb:/ipfs/QmTS2biLVPrv8CeeXCaKmkFxonMiRvc1LxiYBRYDAJHQUS"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155.sol": {
        "keccak256": "0xcab667ddad478ff0d39c2053ca77fac778af8483c18ab07d810277b4216fd582",
        "urls": [
          "bzz-raw://919c7ea27c77275c3c341da0c4a26a66a20ed27605fbe8becf11f58ec3bc65bf",
          "dweb:/ipfs/QmRLKyVE2n7e2Jo4bLNn8eLgqqhNGYnVQyjJPWdr8poskf"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC1155/IERC1155Receiver.sol": {
        "keccak256": "0xeb373f1fdc7b755c6a750123a9b9e3a8a02c1470042fd6505d875000a80bde0b",
        "urls": [
          "bzz-raw://0e28648f994abf1d6bc345644a361cc0b7efa544f8bc0c8ec26011fed85a91ec",
          "dweb:/ipfs/QmVVE7AiRjKaQYYji7TkjmTeVzGpNmms5eoxqTCfvvpj6D"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305",
        "urls": [
          "bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5",
          "dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol": {
        "keccak256": "0xb264c03a3442eb37a68ad620cefd1182766b58bee6cec40343480392d6b14d69",
        "urls": [
          "bzz-raw://28879d01fd22c07b44f006612775f8577defbe459cb01685c5e25cd518c91a71",
          "dweb:/ipfs/QmVgfkwv2Fxw6hhTcDUZhE7NkoSKjab3ipM7UaRbt6uXb5"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
        "keccak256": "0xabefac93435967b4d36a4fabcbdbb918d1f0b7ae3c3d85bc30923b326c927ed1",
        "urls": [
          "bzz-raw://9d213d3befca47da33f6db0310826bcdb148299805c10d77175ecfe1d06a9a68",
          "dweb:/ipfs/QmRgCn6SP1hbBkExUADFuDo8xkT4UU47yjNF5FhCeRbQmS"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol": {
        "keccak256": "0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff",
        "urls": [
          "bzz-raw://7063b5c98711a98018ba4635ac74cee1c1cfa2ea01099498e062699ed9530005",
          "dweb:/ipfs/QmeJ8rGXkcv7RrqLdAW8PCXPAykxVsddfYY6g5NaTwmRFE"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol": {
        "keccak256": "0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266",
        "urls": [
          "bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4",
          "dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol": {
        "keccak256": "0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da",
        "urls": [
          "bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708",
          "dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol": {
        "keccak256": "0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9",
        "urls": [
          "bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146",
          "dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Address.sol": {
        "keccak256": "0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa",
        "urls": [
          "bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931",
          "dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Context.sol": {
        "keccak256": "0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439",
        "urls": [
          "bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c",
          "dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Strings.sol": {
        "keccak256": "0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0",
        "urls": [
          "bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f",
          "dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": {
        "keccak256": "0x809bc3edb4bcbef8263fa616c1b60ee0004b50a8a1bfa164d8f57fd31f520c58",
        "urls": [
          "bzz-raw://8b93a1e39a4a19eba1600b92c96f435442db88cac91e315c8291547a2a7bcfe2",
          "dweb:/ipfs/QmTm34KVe6uZBZwq8dZDNWwPcm24qBJdxqL3rPxBJ4LrMv"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": {
        "keccak256": "0xcf688741f79f4838d5301dcf72d0af9eff11bbab6ab0bb112ad144c7fb672dac",
        "urls": [
          "bzz-raw://85d9c87a481fe99fd28a146c205da0867ef7e1b7edbe0036abc86d2e64eb1f04",
          "dweb:/ipfs/QmR7m1zWQNfZHUKTtqnjoCjCBbNFcjCxV27rxf6iMfhVtG"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol": {
        "keccak256": "0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b",
        "urls": [
          "bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d",
          "dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/introspection/ERC165Checker.sol": {
        "keccak256": "0x5a08ad61f4e82b8a3323562661a86fb10b10190848073fdc13d4ac43710ffba5",
        "urls": [
          "bzz-raw://6f7bb74cf88fd88daa34e118bc6e363381d05044f34f391d39a10c0c9dac3ebd",
          "dweb:/ipfs/QmNbQ3v8v4zuDtg7VeLAbdhAm3tCzUodNoDZZ8ekmCHWZX"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
        "keccak256": "0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1",
        "urls": [
          "bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f",
          "dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
        "keccak256": "0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3",
        "urls": [
          "bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c",
          "dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": {
        "keccak256": "0x52a8cfb0f5239d11b457dcdd1b326992ef672714ca8da71a157255bddd13f3ad",
        "urls": [
          "bzz-raw://495145362c7ff1c9ca88c58bbbbcb412e3c2004406647412394486552ff6c278",
          "dweb:/ipfs/QmNNCeng6d5eRPDn6tkWSQhjE39XWfQEfjA63rRwHmr1iH"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": {
        "keccak256": "0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc",
        "urls": [
          "bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7",
          "dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6"
        ],
        "license": "MIT"
      },
      "src/PWNErrors.sol": {
        "keccak256": "0x8a0e516fc8ddf54aecb82d5cbd19b6f263950a91d4411d1d4c54b90fae010692",
        "urls": [
          "bzz-raw://b9cd08003376c48cdaf6279c4237a38efb1e26080bc29de3343bcfe397a4bb0f",
          "dweb:/ipfs/QmXtMtn71ZzRu1rGQLq8u5vnDy4k462d7mGtu1jFd7ZBJG"
        ],
        "license": "GPL-3.0-only"
      },
      "src/config/PWNConfig.sol": {
        "keccak256": "0x15a2ab788f84df29b960d50b33803130bdd61fe7c0ce76d4f6bf76da7cccb594",
        "urls": [
          "bzz-raw://b1310535db741a5a7a0aff71f34ef329c7f5bf3117f9c38587e4090bec340fb4",
          "dweb:/ipfs/QmYRWwiSAyZMdxSqMYU1K2YRFzBW7L2dHXktx1BdFW9fP5"
        ],
        "license": "GPL-3.0-only"
      },
      "src/hub/PWNHub.sol": {
        "keccak256": "0x92ad9edafc151bc7efc1b132c1be55966bb692860a94803a74ce5a948985126c",
        "urls": [
          "bzz-raw://a04dbfe0ea39f7cd04b7947cac66ce77745ecc20a24aad3f8d35a6d319eec202",
          "dweb:/ipfs/QmbxoqEtL4YwMQDfCydurWLHeVjL1Yjc4Ty4vsRoCqXabv"
        ],
        "license": "GPL-3.0-only"
      },
      "src/hub/PWNHubAccessControl.sol": {
        "keccak256": "0x310e0389c98971c4d6c25d8756c1e8a962c8b22c54e3ce6d80a383fb5b755448",
        "urls": [
          "bzz-raw://63748084b8c8a9e2cce98a87d27a8baf353fae903641d6fdfc2cdc4ed229243f",
          "dweb:/ipfs/QmVywLNCBeWkNdWjpdumnAam1Shwj8k3DxxpRcWAK997Nw"
        ],
        "license": "GPL-3.0-only"
      },
      "src/hub/PWNHubTags.sol": {
        "keccak256": "0xd1e685e8075f1f16835d38cfe39b1eee9edbf75089a0109002f7b2bfe14c177a",
        "urls": [
          "bzz-raw://4a01df6b1c2cf493017b7abb4b9ec6ac16c9b1c3498b16ccbdc4f2045909dde8",
          "dweb:/ipfs/QmcYEgSZrE33YKxDDBvhVgZTfT9Tj1RTEX3iA717zZyspJ"
        ],
        "license": "GPL-3.0-only"
      },
      "src/interfaces/ICryptoKitties.sol": {
        "keccak256": "0x9aaa7f948d4f2121d764b5664fe1c8431b3c5bfce780228eceb56d1589681706",
        "urls": [
          "bzz-raw://05416e111c8ff6a1464248ac387e8c69015c355e949967586d514d9d17d619aa",
          "dweb:/ipfs/QmVK5Q6bS1CevgdxB17RJ9BGZsspCXdY5Y5dX4cpgQ4Rze"
        ],
        "license": "MIT"
      },
      "src/interfaces/IERC5646.sol": {
        "keccak256": "0xff5ce494375d2cf5a67fe9460ea66aa3572b8a0434ae538cbac0a55f7aac5c5e",
        "urls": [
          "bzz-raw://e8e2b472fa80a92ae12985da77056f68f0e0f36fca7ac37b6d30db82a2527180",
          "dweb:/ipfs/QmdFTGSCaPcVfthbGSUuiyhivqBx6xN9dCL14PCbR39Wki"
        ],
        "license": "GPL-3.0-only"
      },
      "src/interfaces/IMultiTokenCategoryRegistry.sol": {
        "keccak256": "0x5607c7415785a07c7226638ab7d16ae9a87906e5eafb06e723944144b8f7c48a",
        "urls": [
          "bzz-raw://dd5f1d39f2acb6cda18a1199e06be211deccce27478de077d942ced8ada6e0b1",
          "dweb:/ipfs/Qmdx2uXjyoyyqNQU5aQTpagujxSVAfS17Sc3ziJGAofXnX"
        ],
        "license": "MIT"
      },
      "src/interfaces/IPWNLoanMetadataProvider.sol": {
        "keccak256": "0x6cc991fd9c8c88e0a69e835fcd514868836e2432b12454dfcb6a681a3a9d13b8",
        "urls": [
          "bzz-raw://69fd07433fd7eb2f1474d778476240434fa79a31525341d88a588573562389c6",
          "dweb:/ipfs/Qmb6gWNQD96oSgwH5Yf6eMHxYWXZwCPrd7MvK86r7UKhZK"
        ],
        "license": "GPL-3.0-only"
      },
      "src/interfaces/IPoolAdapter.sol": {
        "keccak256": "0xe0309b4e7da2046095c7dc943d953f32d2a46b0ad64beaf3f4ed1b440fe43f89",
        "urls": [
          "bzz-raw://15870bf95e096b35620787a0eba49f7becbaff738651a83bd28310d022cdc93b",
          "dweb:/ipfs/QmZPYmxrjB6SFWr5arTztrDofQ6XdyzXTUMeaQt5wcbv3T"
        ],
        "license": "GPL-3.0-only"
      },
      "src/interfaces/IStateFingerpringComputer.sol": {
        "keccak256": "0xb2f72031bdd6b6ac7179ca9af90c290d37bcc43d6bab4db6e0b1ee7c7b4f72a2",
        "urls": [
          "bzz-raw://d8de3c648f1afab5458e553042a59b0df3d8d54be1a488e891de70821745da0c",
          "dweb:/ipfs/QmQ6QoeMgZGdVjJ2aAt8t1AuBCJ95m6BRSR1GKRqVk4jct"
        ],
        "license": "GPL-3.0-only"
      },
      "src/loan/lib/PWNFeeCalculator.sol": {
        "keccak256": "0xab8eb0be2d2e5a7c909a326de53459ae2ed6fd7cdd3985719515f279f952fcdf",
        "urls": [
          "bzz-raw://4ca7a9d230ab90b46cdb1a16bd99af5639af7adcf2250a20b7e1f77c952344f5",
          "dweb:/ipfs/QmXzwraVHPmrVFtR4tkm5JqafygeDDvbQbkKu33EYUWLMq"
        ],
        "license": "GPL-3.0-only"
      },
      "src/loan/lib/PWNSignatureChecker.sol": {
        "keccak256": "0xb76220c904f1b4c9e08166c4175746b161aaf70be14dc22b1a335f351970d1fd",
        "urls": [
          "bzz-raw://846d1cc6b7f1ba8b0bc6b5836aad018828bc1ad8f6f994ec59d24f6617d91fc1",
          "dweb:/ipfs/QmWe7cAsDysa6Qjn9vBAiHW4iaPmZnaeVmqxnwRMikgSCM"
        ],
        "license": "GPL-3.0-only"
      },
      "src/loan/terms/simple/loan/PWNSimpleLoan.sol": {
        "keccak256": "0x6dd44efd796277aeb5a7712591cfbee10ea3058c0f8f97f9c6111297714d3155",
        "urls": [
          "bzz-raw://0a65b5a30ea71966c8deaa54f621985568fbcbe37bcb6174219410837c9722d9",
          "dweb:/ipfs/QmWzCC35n2a2GsqEkU27i1LKGjqhYTZ1wLfEBnUxsPRrfr"
        ],
        "license": "GPL-3.0-only"
      },
      "src/loan/terms/simple/proposal/PWNSimpleLoanProposal.sol": {
        "keccak256": "0xa0569c9949bfcd4995d813e1bfe3cb89dcf55293e2fb7728ade49d49be1c6d2d",
        "urls": [
          "bzz-raw://d94dc60f4f6591cac65d95bea69a8b6364589977b085892f334e4224ce3b754d",
          "dweb:/ipfs/QmV3NaHYz3bNbXsKbrHEJxBuLHJyStB6917hJ1D7dtqhs5"
        ],
        "license": "GPL-3.0-only"
      },
      "src/loan/token/PWNLOAN.sol": {
        "keccak256": "0x92981fb0bd0abcadc45b0f88bfc5fcc960ce7a5b79494fc6c9fd5990b197c764",
        "urls": [
          "bzz-raw://e10726f492991694d751b68bf87a352f1284710ba311614295381a58ebfd226e",
          "dweb:/ipfs/Qmct6PYHSqHo9K9rGAif9ohBpJuQnTBWdHJRdENpetGg7k"
        ],
        "license": "GPL-3.0-only"
      },
      "src/loan/vault/PWNVault.sol": {
        "keccak256": "0x00f3a6cad5f19a0a818d351a5aa849e41a34bf0251a872d4993d40d77468f29e",
        "urls": [
          "bzz-raw://01942d7d871fe64f229820f5f90be23b647e438d951531a5f60a470f8093977e",
          "dweb:/ipfs/QmcyDXfCdgSQ8P454JxfuTzNBSxfpzeJ9aTPBefTH3dTvK"
        ],
        "license": "GPL-3.0-only"
      },
      "src/loan/vault/Permit.sol": {
        "keccak256": "0xce0acf24731cfaa49535adea5c0c6ebade736d35f3f54a8150ef175a693e3cee",
        "urls": [
          "bzz-raw://3542ad1e3295c63363fe825d3e46ad447fcd614f31f4dadeea39d24086e02c7a",
          "dweb:/ipfs/QmVjAuaQ1UdqgJAmvR8pdXQCb3Zy7fDQeBtbx9ZTbCQic4"
        ],
        "license": "GPL-3.0-only"
      },
      "src/nonce/PWNRevokedNonce.sol": {
        "keccak256": "0xc0c75afa97243c3ef711e04cc9ffd0b3d44fa7999333b0048dc37b562a4cc06e",
        "urls": [
          "bzz-raw://5b2b7271b9505f35a05d2d68803f20116b621dcecfc528806225e0280b0a420e",
          "dweb:/ipfs/QmZh95WUcgTHz7ifsQhmrq1wCjvDXfwwh9G7k49otPisxx"
        ],
        "license": "GPL-3.0-only"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/loan/terms/simple/loan/PWNSimpleLoan.sol",
    "id": 63282,
    "exportedSymbols": {
      "AddressMissingHubTag": [
        59971
      ],
      "Expired": [
        59984
      ],
      "IERC5646": [
        60616
      ],
      "IMultiTokenCategoryRegistry": [
        96523
      ],
      "IPWNLoanMetadataProvider": [
        60668
      ],
      "IPoolAdapter": [
        60696
      ],
      "InvalidPermitAsset": [
        66296
      ],
      "InvalidPermitOwner": [
        66289
      ],
      "Math": [
        55080
      ],
      "MultiToken": [
        1132
      ],
      "PWNConfig": [
        60390
      ],
      "PWNFeeCalculator": [
        60763
      ],
      "PWNHub": [
        60517
      ],
      "PWNHubTags": [
        60604
      ],
      "PWNLOAN": [
        65743
      ],
      "PWNRevokedNonce": [
        66596
      ],
      "PWNSignatureChecker": [
        60911
      ],
      "PWNSimpleLoan": [
        63281
      ],
      "PWNSimpleLoanProposal": [
        65236
      ],
      "PWNVault": [
        66265
      ],
      "Permit": [
        66282
      ],
      "SafeCast": [
        56621
      ]
    },
    "nodeType": "SourceUnit",
    "src": "41:49571:86",
    "nodes": [
      {
        "id": 60913,
        "nodeType": "PragmaDirective",
        "src": "41:23:86",
        "nodes": [],
        "literals": [
          "solidity",
          "0.8",
          ".16"
        ]
      },
      {
        "id": 60916,
        "nodeType": "ImportDirective",
        "src": "66:84:86",
        "nodes": [],
        "absolutePath": "lib/MultiToken/src/MultiToken.sol",
        "file": "MultiToken/MultiToken.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 1133,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60914,
              "name": "MultiToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 1132,
              "src": "75:10:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 60915,
              "name": "IMultiTokenCategoryRegistry",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 96523,
              "src": "87:27:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60918,
        "nodeType": "ImportDirective",
        "src": "152:56:86",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/utils/math/Math.sol",
        "file": "openzeppelin/utils/math/Math.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 55081,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60917,
              "name": "Math",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 55080,
              "src": "161:4:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60920,
        "nodeType": "ImportDirective",
        "src": "209:64:86",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol",
        "file": "openzeppelin/utils/math/SafeCast.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 56622,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60919,
              "name": "SafeCast",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 56621,
              "src": "218:8:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60922,
        "nodeType": "ImportDirective",
        "src": "275:53:86",
        "nodes": [],
        "absolutePath": "src/config/PWNConfig.sol",
        "file": "pwn/config/PWNConfig.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 60391,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60921,
              "name": "PWNConfig",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60390,
              "src": "284:9:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60924,
        "nodeType": "ImportDirective",
        "src": "329:44:86",
        "nodes": [],
        "absolutePath": "src/hub/PWNHub.sol",
        "file": "pwn/hub/PWNHub.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 60518,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60923,
              "name": "PWNHub",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60517,
              "src": "338:6:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60926,
        "nodeType": "ImportDirective",
        "src": "374:52:86",
        "nodes": [],
        "absolutePath": "src/hub/PWNHubTags.sol",
        "file": "pwn/hub/PWNHubTags.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 60605,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60925,
              "name": "PWNHubTags",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60604,
              "src": "383:10:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60928,
        "nodeType": "ImportDirective",
        "src": "427:55:86",
        "nodes": [],
        "absolutePath": "src/interfaces/IERC5646.sol",
        "file": "pwn/interfaces/IERC5646.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 60617,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60927,
              "name": "IERC5646",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60616,
              "src": "436:8:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60930,
        "nodeType": "ImportDirective",
        "src": "483:63:86",
        "nodes": [],
        "absolutePath": "src/interfaces/IPoolAdapter.sol",
        "file": "pwn/interfaces/IPoolAdapter.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 60697,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60929,
              "name": "IPoolAdapter",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60696,
              "src": "492:12:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60932,
        "nodeType": "ImportDirective",
        "src": "547:87:86",
        "nodes": [],
        "absolutePath": "src/interfaces/IPWNLoanMetadataProvider.sol",
        "file": "pwn/interfaces/IPWNLoanMetadataProvider.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 60669,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60931,
              "name": "IPWNLoanMetadataProvider",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60668,
              "src": "556:24:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60934,
        "nodeType": "ImportDirective",
        "src": "635:69:86",
        "nodes": [],
        "absolutePath": "src/loan/lib/PWNFeeCalculator.sol",
        "file": "pwn/loan/lib/PWNFeeCalculator.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 60764,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60933,
              "name": "PWNFeeCalculator",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60763,
              "src": "644:16:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60936,
        "nodeType": "ImportDirective",
        "src": "705:75:86",
        "nodes": [],
        "absolutePath": "src/loan/lib/PWNSignatureChecker.sol",
        "file": "pwn/loan/lib/PWNSignatureChecker.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 60912,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60935,
              "name": "PWNSignatureChecker",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 60911,
              "src": "714:19:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60938,
        "nodeType": "ImportDirective",
        "src": "781:97:86",
        "nodes": [],
        "absolutePath": "src/loan/terms/simple/proposal/PWNSimpleLoanProposal.sol",
        "file": "pwn/loan/terms/simple/proposal/PWNSimpleLoanProposal.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 65237,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60937,
              "name": "PWNSimpleLoanProposal",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 65236,
              "src": "790:21:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60940,
        "nodeType": "ImportDirective",
        "src": "879:53:86",
        "nodes": [],
        "absolutePath": "src/loan/token/PWNLOAN.sol",
        "file": "pwn/loan/token/PWNLOAN.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 65744,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60939,
              "name": "PWNLOAN",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 65743,
              "src": "888:7:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60944,
        "nodeType": "ImportDirective",
        "src": "933:91:86",
        "nodes": [],
        "absolutePath": "src/loan/vault/Permit.sol",
        "file": "pwn/loan/vault/Permit.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 66297,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60941,
              "name": "Permit",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 66282,
              "src": "942:6:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 60942,
              "name": "InvalidPermitOwner",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 66289,
              "src": "950:18:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 60943,
              "name": "InvalidPermitAsset",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 66296,
              "src": "970:18:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60946,
        "nodeType": "ImportDirective",
        "src": "1025:55:86",
        "nodes": [],
        "absolutePath": "src/loan/vault/PWNVault.sol",
        "file": "pwn/loan/vault/PWNVault.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 66266,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60945,
              "name": "PWNVault",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 66265,
              "src": "1034:8:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60948,
        "nodeType": "ImportDirective",
        "src": "1081:64:86",
        "nodes": [],
        "absolutePath": "src/nonce/PWNRevokedNonce.sol",
        "file": "pwn/nonce/PWNRevokedNonce.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 66597,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60947,
              "name": "PWNRevokedNonce",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 66596,
              "src": "1090:15:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 60951,
        "nodeType": "ImportDirective",
        "src": "1146:66:86",
        "nodes": [],
        "absolutePath": "src/PWNErrors.sol",
        "file": "pwn/PWNErrors.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 63282,
        "sourceUnit": 59985,
        "symbolAliases": [
          {
            "foreign": {
              "id": 60949,
              "name": "Expired",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 59984,
              "src": "1155:7:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 60950,
              "name": "AddressMissingHubTag",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 59971,
              "src": "1164:20:86",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 63281,
        "nodeType": "ContractDefinition",
        "src": "1374:48237:86",
        "nodes": [
          {
            "id": 60961,
            "nodeType": "UsingForDirective",
            "src": "1451:29:86",
            "nodes": [],
            "global": false,
            "libraryName": {
              "id": 60959,
              "name": "MultiToken",
              "nameLocations": [
                "1457:10:86"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 1132,
              "src": "1457:10:86"
            },
            "typeName": {
              "id": 60960,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1472:7:86",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 60964,
            "nodeType": "VariableDeclaration",
            "src": "1486:38:86",
            "nodes": [],
            "constant": true,
            "functionSelector": "ffa1ad74",
            "mutability": "constant",
            "name": "VERSION",
            "nameLocation": "1509:7:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_memory_ptr",
              "typeString": "string"
            },
            "typeName": {
              "id": 60962,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1486:6:86",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": {
              "hexValue": "312e32",
              "id": 60963,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1519:5:86",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_72fde8556a44472a9465c32773a7311620e335fb2293061673df3c1dc72c1df3",
                "typeString": "literal_string \"1.2\""
              },
              "value": "1.2"
            },
            "visibility": "public"
          },
          {
            "id": 60967,
            "nodeType": "VariableDeclaration",
            "src": "1733:53:86",
            "nodes": [],
            "constant": true,
            "functionSelector": "89d99a05",
            "mutability": "constant",
            "name": "MIN_LOAN_DURATION",
            "nameLocation": "1756:17:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 60965,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1733:6:86",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "hexValue": "3130",
              "id": 60966,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1776:10:86",
              "subdenomination": "minutes",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_600_by_1",
                "typeString": "int_const 600"
              },
              "value": "10"
            },
            "visibility": "public"
          },
          {
            "id": 60970,
            "nodeType": "VariableDeclaration",
            "src": "1792:55:86",
            "nodes": [],
            "constant": true,
            "functionSelector": "c399e17d",
            "mutability": "constant",
            "name": "MAX_ACCRUING_INTEREST_APR",
            "nameLocation": "1815:25:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint40",
              "typeString": "uint40"
            },
            "typeName": {
              "id": 60968,
              "name": "uint40",
              "nodeType": "ElementaryTypeName",
              "src": "1792:6:86",
              "typeDescriptions": {
                "typeIdentifier": "t_uint40",
                "typeString": "uint40"
              }
            },
            "value": {
              "hexValue": "31653131",
              "id": 60969,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1843:4:86",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_100000000000_by_1",
                "typeString": "int_const 100000000000"
              },
              "value": "1e11"
            },
            "visibility": "public"
          },
          {
            "id": 60973,
            "nodeType": "VariableDeclaration",
            "src": "1872:54:86",
            "nodes": [],
            "constant": true,
            "functionSelector": "a11a581c",
            "mutability": "constant",
            "name": "APR_INTEREST_DENOMINATOR",
            "nameLocation": "1896:24:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 60971,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1872:7:86",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "316534",
              "id": 60972,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1923:3:86",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_10000_by_1",
                "typeString": "int_const 10000"
              },
              "value": "1e4"
            },
            "visibility": "public"
          },
          {
            "id": 60976,
            "nodeType": "VariableDeclaration",
            "src": "1932:57:86",
            "nodes": [],
            "constant": true,
            "functionSelector": "a2d00469",
            "mutability": "constant",
            "name": "DAILY_INTEREST_DENOMINATOR",
            "nameLocation": "1956:26:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 60974,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1932:7:86",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "31653130",
              "id": 60975,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1985:4:86",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_10000000000_by_1",
                "typeString": "int_const 10000000000"
              },
              "value": "1e10"
            },
            "visibility": "public"
          },
          {
            "id": 60979,
            "nodeType": "VariableDeclaration",
            "src": "1996:61:86",
            "nodes": [],
            "constant": true,
            "functionSelector": "25f2c190",
            "mutability": "constant",
            "name": "APR_TO_DAILY_INTEREST_NUMERATOR",
            "nameLocation": "2020:31:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 60977,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1996:7:86",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "323734",
              "id": 60978,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2054:3:86",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_274_by_1",
                "typeString": "int_const 274"
              },
              "value": "274"
            },
            "visibility": "public"
          },
          {
            "id": 60982,
            "nodeType": "VariableDeclaration",
            "src": "2063:63:86",
            "nodes": [],
            "constant": true,
            "functionSelector": "58b5d263",
            "mutability": "constant",
            "name": "APR_TO_DAILY_INTEREST_DENOMINATOR",
            "nameLocation": "2087:33:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 60980,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2063:7:86",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "316535",
              "id": 60981,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2123:3:86",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_100000_by_1",
                "typeString": "int_const 100000"
              },
              "value": "1e5"
            },
            "visibility": "public"
          },
          {
            "id": 60985,
            "nodeType": "VariableDeclaration",
            "src": "2133:56:86",
            "nodes": [],
            "constant": true,
            "functionSelector": "2c8ebec8",
            "mutability": "constant",
            "name": "MAX_EXTENSION_DURATION",
            "nameLocation": "2157:22:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 60983,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2133:7:86",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3930",
              "id": 60984,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2182:7:86",
              "subdenomination": "days",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_7776000_by_1",
                "typeString": "int_const 7776000"
              },
              "value": "90"
            },
            "visibility": "public"
          },
          {
            "id": 60988,
            "nodeType": "VariableDeclaration",
            "src": "2195:55:86",
            "nodes": [],
            "constant": true,
            "functionSelector": "7f24133f",
            "mutability": "constant",
            "name": "MIN_EXTENSION_DURATION",
            "nameLocation": "2219:22:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 60986,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2195:7:86",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "31",
              "id": 60987,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2244:6:86",
              "subdenomination": "days",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_86400_by_1",
                "typeString": "int_const 86400"
              },
              "value": "1"
            },
            "visibility": "public"
          },
          {
            "id": 60993,
            "nodeType": "VariableDeclaration",
            "src": "2257:253:86",
            "nodes": [],
            "constant": true,
            "functionSelector": "4acacdda",
            "mutability": "constant",
            "name": "EXTENSION_PROPOSAL_TYPEHASH",
            "nameLocation": "2281:27:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 60989,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2257:7:86",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "457874656e73696f6e50726f706f73616c2875696e74323536206c6f616e49642c6164647265737320636f6d70656e736174696f6e416464726573732c75696e7432353620636f6d70656e736174696f6e416d6f756e742c75696e743430206475726174696f6e2c75696e7434302065787069726174696f6e2c616464726573732070726f706f7365722c75696e74323536206e6f6e636553706163652c75696e74323536206e6f6e636529",
                  "id": 60991,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "2330:174:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_9ff198f1043fd251b64c2f21c2278160819a77a1da50cf8284dc53af040fa717",
                    "typeString": "literal_string \"ExtensionProposal(uint256 loanId,address compensationAddress,uint256 compensationAmount,uint40 duration,uint40 expiration,address proposer,uint256 nonceSpace,uint256 nonce)\""
                  },
                  "value": "ExtensionProposal(uint256 loanId,address compensationAddress,uint256 compensationAmount,uint40 duration,uint40 expiration,address proposer,uint256 nonceSpace,uint256 nonce)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_9ff198f1043fd251b64c2f21c2278160819a77a1da50cf8284dc53af040fa717",
                    "typeString": "literal_string \"ExtensionProposal(uint256 loanId,address compensationAddress,uint256 compensationAmount,uint40 duration,uint40 expiration,address proposer,uint256 nonceSpace,uint256 nonce)\""
                  }
                ],
                "id": 60990,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "2311:9:86",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 60992,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "nameLocations": [],
              "names": [],
              "nodeType": "FunctionCall",
              "src": "2311:199:86",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 61018,
            "nodeType": "VariableDeclaration",
            "src": "2517:304:86",
            "nodes": [],
            "constant": false,
            "functionSelector": "3644e515",
            "mutability": "immutable",
            "name": "DOMAIN_SEPARATOR",
            "nameLocation": "2542:16:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 60994,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "2517:7:86",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "arguments": [
                    {
                      "arguments": [
                        {
                          "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
                          "id": 60999,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2601:84:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
                            "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""
                          },
                          "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
                            "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""
                          }
                        ],
                        "id": 60998,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "2591:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 61000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2591:95:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    {
                      "arguments": [
                        {
                          "hexValue": "50574e53696d706c654c6f616e",
                          "id": 61002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2706:15:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_3af43dc47dd092dc79d11f941571a702d1419a15bb1e9b52d0e0e91e22f07352",
                            "typeString": "literal_string \"PWNSimpleLoan\""
                          },
                          "value": "PWNSimpleLoan"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_3af43dc47dd092dc79d11f941571a702d1419a15bb1e9b52d0e0e91e22f07352",
                            "typeString": "literal_string \"PWNSimpleLoan\""
                          }
                        ],
                        "id": 61001,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "2696:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 61003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2696:26:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 61007,
                              "name": "VERSION",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 60964,
                              "src": "2759:7:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 61005,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "2742:3:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 61006,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "2746:12:86",
                            "memberName": "encodePacked",
                            "nodeType": "MemberAccess",
                            "src": "2742:16:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function () pure returns (bytes memory)"
                            }
                          },
                          "id": 61008,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2742:25:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 61004,
                        "name": "keccak256",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -8,
                        "src": "2732:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                          "typeString": "function (bytes memory) pure returns (bytes32)"
                        }
                      },
                      "id": 61009,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2732:36:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    {
                      "expression": {
                        "id": 61010,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "2778:5:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 61011,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2784:7:86",
                      "memberName": "chainid",
                      "nodeType": "MemberAccess",
                      "src": "2778:13:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    {
                      "arguments": [
                        {
                          "id": 61014,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "2809:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_PWNSimpleLoan_$63281",
                            "typeString": "contract PWNSimpleLoan"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_PWNSimpleLoan_$63281",
                            "typeString": "contract PWNSimpleLoan"
                          }
                        ],
                        "id": 61013,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2801:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 61012,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2801:7:86",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 61015,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2801:13:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    ],
                    "expression": {
                      "id": 60996,
                      "name": "abi",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -1,
                      "src": "2571:3:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_abi",
                        "typeString": "abi"
                      }
                    },
                    "id": 60997,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "2575:6:86",
                    "memberName": "encode",
                    "nodeType": "MemberAccess",
                    "src": "2571:10:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                      "typeString": "function () pure returns (bytes memory)"
                    }
                  },
                  "id": 61016,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": false,
                  "kind": "functionCall",
                  "lValueRequested": false,
                  "nameLocations": [],
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "2571:249:86",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                ],
                "id": 60995,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "2561:9:86",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 61017,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "kind": "functionCall",
              "lValueRequested": false,
              "nameLocations": [],
              "names": [],
              "nodeType": "FunctionCall",
              "src": "2561:260:86",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 61021,
            "nodeType": "VariableDeclaration",
            "src": "2828:27:86",
            "nodes": [],
            "constant": false,
            "functionSelector": "365a86fc",
            "mutability": "immutable",
            "name": "hub",
            "nameLocation": "2852:3:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_PWNHub_$60517",
              "typeString": "contract PWNHub"
            },
            "typeName": {
              "id": 61020,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 61019,
                "name": "PWNHub",
                "nameLocations": [
                  "2828:6:86"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 60517,
                "src": "2828:6:86"
              },
              "referencedDeclaration": 60517,
              "src": "2828:6:86",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PWNHub_$60517",
                "typeString": "contract PWNHub"
              }
            },
            "visibility": "public"
          },
          {
            "id": 61024,
            "nodeType": "VariableDeclaration",
            "src": "2861:34:86",
            "nodes": [],
            "constant": false,
            "functionSelector": "06d37817",
            "mutability": "immutable",
            "name": "loanToken",
            "nameLocation": "2886:9:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_PWNLOAN_$65743",
              "typeString": "contract PWNLOAN"
            },
            "typeName": {
              "id": 61023,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 61022,
                "name": "PWNLOAN",
                "nameLocations": [
                  "2861:7:86"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 65743,
                "src": "2861:7:86"
              },
              "referencedDeclaration": 65743,
              "src": "2861:7:86",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PWNLOAN_$65743",
                "typeString": "contract PWNLOAN"
              }
            },
            "visibility": "public"
          },
          {
            "id": 61027,
            "nodeType": "VariableDeclaration",
            "src": "2901:33:86",
            "nodes": [],
            "constant": false,
            "functionSelector": "79502c55",
            "mutability": "immutable",
            "name": "config",
            "nameLocation": "2928:6:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_PWNConfig_$60390",
              "typeString": "contract PWNConfig"
            },
            "typeName": {
              "id": 61026,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 61025,
                "name": "PWNConfig",
                "nameLocations": [
                  "2901:9:86"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 60390,
                "src": "2901:9:86"
              },
              "referencedDeclaration": 60390,
              "src": "2901:9:86",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PWNConfig_$60390",
                "typeString": "contract PWNConfig"
              }
            },
            "visibility": "public"
          },
          {
            "id": 61030,
            "nodeType": "VariableDeclaration",
            "src": "2940:45:86",
            "nodes": [],
            "constant": false,
            "functionSelector": "9788ad55",
            "mutability": "immutable",
            "name": "revokedNonce",
            "nameLocation": "2973:12:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_PWNRevokedNonce_$66596",
              "typeString": "contract PWNRevokedNonce"
            },
            "typeName": {
              "id": 61029,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 61028,
                "name": "PWNRevokedNonce",
                "nameLocations": [
                  "2940:15:86"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 66596,
                "src": "2940:15:86"
              },
              "referencedDeclaration": 66596,
              "src": "2940:15:86",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PWNRevokedNonce_$66596",
                "typeString": "contract PWNRevokedNonce"
              }
            },
            "visibility": "public"
          },
          {
            "id": 61033,
            "nodeType": "VariableDeclaration",
            "src": "2991:61:86",
            "nodes": [],
            "constant": false,
            "functionSelector": "58099d96",
            "mutability": "immutable",
            "name": "categoryRegistry",
            "nameLocation": "3036:16:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IMultiTokenCategoryRegistry_$96523",
              "typeString": "contract IMultiTokenCategoryRegistry"
            },
            "typeName": {
              "id": 61032,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 61031,
                "name": "IMultiTokenCategoryRegistry",
                "nameLocations": [
                  "2991:27:86"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 96523,
                "src": "2991:27:86"
              },
              "referencedDeclaration": 96523,
              "src": "2991:27:86",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IMultiTokenCategoryRegistry_$96523",
                "typeString": "contract IMultiTokenCategoryRegistry"
              }
            },
            "visibility": "public"
          },
          {
            "id": 61054,
            "nodeType": "StructDefinition",
            "src": "3887:304:86",
            "nodes": [],
            "canonicalName": "PWNSimpleLoan.Terms",
            "members": [
              {
                "constant": false,
                "id": 61035,
                "mutability": "mutable",
                "name": "lender",
                "nameLocation": "3918:6:86",
                "nodeType": "VariableDeclaration",
                "scope": 61054,
                "src": "3910:14:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 61034,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3910:7:86",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61037,
                "mutability": "mutable",
                "name": "borrower",
                "nameLocation": "3942:8:86",
                "nodeType": "VariableDeclaration",
                "scope": 61054,
                "src": "3934:16:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 61036,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3934:7:86",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61039,
                "mutability": "mutable",
                "name": "duration",
                "nameLocation": "3967:8:86",
                "nodeType": "VariableDeclaration",
                "scope": 61054,
                "src": "3960:15:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 61038,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "3960:6:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61042,
                "mutability": "mutable",
                "name": "collateral",
                "nameLocation": "4002:10:86",
                "nodeType": "VariableDeclaration",
                "scope": 61054,
                "src": "3985:27:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                  "typeString": "struct MultiToken.Asset"
                },
                "typeName": {
                  "id": 61041,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 61040,
                    "name": "MultiToken.Asset",
                    "nameLocations": [
                      "3985:10:86",
                      "3996:5:86"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 60,
                    "src": "3985:16:86"
                  },
                  "referencedDeclaration": 60,
                  "src": "3985:16:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                    "typeString": "struct MultiToken.Asset"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61045,
                "mutability": "mutable",
                "name": "credit",
                "nameLocation": "4039:6:86",
                "nodeType": "VariableDeclaration",
                "scope": 61054,
                "src": "4022:23:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                  "typeString": "struct MultiToken.Asset"
                },
                "typeName": {
                  "id": 61044,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 61043,
                    "name": "MultiToken.Asset",
                    "nameLocations": [
                      "4022:10:86",
                      "4033:5:86"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 60,
                    "src": "4022:16:86"
                  },
                  "referencedDeclaration": 60,
                  "src": "4022:16:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                    "typeString": "struct MultiToken.Asset"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61047,
                "mutability": "mutable",
                "name": "fixedInterestAmount",
                "nameLocation": "4063:19:86",
                "nodeType": "VariableDeclaration",
                "scope": 61054,
                "src": "4055:27:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 61046,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "4055:7:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61049,
                "mutability": "mutable",
                "name": "accruingInterestAPR",
                "nameLocation": "4099:19:86",
                "nodeType": "VariableDeclaration",
                "scope": 61054,
                "src": "4092:26:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint40",
                  "typeString": "uint40"
                },
                "typeName": {
                  "id": 61048,
                  "name": "uint40",
                  "nodeType": "ElementaryTypeName",
                  "src": "4092:6:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61051,
                "mutability": "mutable",
                "name": "lenderSpecHash",
                "nameLocation": "4136:14:86",
                "nodeType": "VariableDeclaration",
                "scope": 61054,
                "src": "4128:22:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 61050,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "4128:7:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61053,
                "mutability": "mutable",
                "name": "borrowerSpecHash",
                "nameLocation": "4168:16:86",
                "nodeType": "VariableDeclaration",
                "scope": 61054,
                "src": "4160:24:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 61052,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "4160:7:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Terms",
            "nameLocation": "3894:5:86",
            "scope": 63281,
            "visibility": "public"
          },
          {
            "id": 61064,
            "nodeType": "StructDefinition",
            "src": "4587:156:86",
            "nodes": [],
            "canonicalName": "PWNSimpleLoan.ProposalSpec",
            "members": [
              {
                "constant": false,
                "id": 61056,
                "mutability": "mutable",
                "name": "proposalContract",
                "nameLocation": "4625:16:86",
                "nodeType": "VariableDeclaration",
                "scope": 61064,
                "src": "4617:24:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 61055,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "4617:7:86",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61058,
                "mutability": "mutable",
                "name": "proposalData",
                "nameLocation": "4657:12:86",
                "nodeType": "VariableDeclaration",
                "scope": 61064,
                "src": "4651:18:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 61057,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "4651:5:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61061,
                "mutability": "mutable",
                "name": "proposalInclusionProof",
                "nameLocation": "4689:22:86",
                "nodeType": "VariableDeclaration",
                "scope": 61064,
                "src": "4679:32:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                  "typeString": "bytes32[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 61059,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4679:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 61060,
                  "nodeType": "ArrayTypeName",
                  "src": "4679:9:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                    "typeString": "bytes32[]"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61063,
                "mutability": "mutable",
                "name": "signature",
                "nameLocation": "4727:9:86",
                "nodeType": "VariableDeclaration",
                "scope": 61064,
                "src": "4721:15:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 61062,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "4721:5:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "ProposalSpec",
            "nameLocation": "4594:12:86",
            "scope": 63281,
            "visibility": "public"
          },
          {
            "id": 61067,
            "nodeType": "StructDefinition",
            "src": "5049:56:86",
            "nodes": [],
            "canonicalName": "PWNSimpleLoan.LenderSpec",
            "members": [
              {
                "constant": false,
                "id": 61066,
                "mutability": "mutable",
                "name": "sourceOfFunds",
                "nameLocation": "5085:13:86",
                "nodeType": "VariableDeclaration",
                "scope": 61067,
                "src": "5077:21:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 61065,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "5077:7:86",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "LenderSpec",
            "nameLocation": "5056:10:86",
            "scope": 63281,
            "visibility": "public"
          },
          {
            "id": 61076,
            "nodeType": "StructDefinition",
            "src": "5512:135:86",
            "nodes": [],
            "canonicalName": "PWNSimpleLoan.CallerSpec",
            "members": [
              {
                "constant": false,
                "id": 61069,
                "mutability": "mutable",
                "name": "refinancingLoanId",
                "nameLocation": "5548:17:86",
                "nodeType": "VariableDeclaration",
                "scope": 61076,
                "src": "5540:25:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 61068,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5540:7:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61071,
                "mutability": "mutable",
                "name": "revokeNonce",
                "nameLocation": "5580:11:86",
                "nodeType": "VariableDeclaration",
                "scope": 61076,
                "src": "5575:16:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 61070,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "5575:4:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61073,
                "mutability": "mutable",
                "name": "nonce",
                "nameLocation": "5609:5:86",
                "nodeType": "VariableDeclaration",
                "scope": 61076,
                "src": "5601:13:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 61072,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "5601:7:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61075,
                "mutability": "mutable",
                "name": "permitData",
                "nameLocation": "5630:10:86",
                "nodeType": "VariableDeclaration",
                "scope": 61076,
                "src": "5624:16:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 61074,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "5624:5:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "CallerSpec",
            "nameLocation": "5519:10:86",
            "scope": 63281,
            "visibility": "public"
          },
          {
            "id": 61100,
            "nodeType": "StructDefinition",
            "src": "6851:382:86",
            "nodes": [],
            "canonicalName": "PWNSimpleLoan.LOAN",
            "members": [
              {
                "constant": false,
                "id": 61078,
                "mutability": "mutable",
                "name": "status",
                "nameLocation": "6879:6:86",
                "nodeType": "VariableDeclaration",
                "scope": 61100,
                "src": "6873:12:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 61077,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "6873:5:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61080,
                "mutability": "mutable",
                "name": "creditAddress",
                "nameLocation": "6903:13:86",
                "nodeType": "VariableDeclaration",
                "scope": 61100,
                "src": "6895:21:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 61079,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "6895:7:86",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61082,
                "mutability": "mutable",
                "name": "originalSourceOfFunds",
                "nameLocation": "6934:21:86",
                "nodeType": "VariableDeclaration",
                "scope": 61100,
                "src": "6926:29:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 61081,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "6926:7:86",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61084,
                "mutability": "mutable",
                "name": "startTimestamp",
                "nameLocation": "6972:14:86",
                "nodeType": "VariableDeclaration",
                "scope": 61100,
                "src": "6965:21:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint40",
                  "typeString": "uint40"
                },
                "typeName": {
                  "id": 61083,
                  "name": "uint40",
                  "nodeType": "ElementaryTypeName",
                  "src": "6965:6:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61086,
                "mutability": "mutable",
                "name": "defaultTimestamp",
                "nameLocation": "7003:16:86",
                "nodeType": "VariableDeclaration",
                "scope": 61100,
                "src": "6996:23:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint40",
                  "typeString": "uint40"
                },
                "typeName": {
                  "id": 61085,
                  "name": "uint40",
                  "nodeType": "ElementaryTypeName",
                  "src": "6996:6:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61088,
                "mutability": "mutable",
                "name": "borrower",
                "nameLocation": "7037:8:86",
                "nodeType": "VariableDeclaration",
                "scope": 61100,
                "src": "7029:16:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 61087,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "7029:7:86",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61090,
                "mutability": "mutable",
                "name": "originalLender",
                "nameLocation": "7063:14:86",
                "nodeType": "VariableDeclaration",
                "scope": 61100,
                "src": "7055:22:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 61089,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "7055:7:86",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61092,
                "mutability": "mutable",
                "name": "accruingInterestDailyRate",
                "nameLocation": "7094:25:86",
                "nodeType": "VariableDeclaration",
                "scope": 61100,
                "src": "7087:32:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint40",
                  "typeString": "uint40"
                },
                "typeName": {
                  "id": 61091,
                  "name": "uint40",
                  "nodeType": "ElementaryTypeName",
                  "src": "7087:6:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61094,
                "mutability": "mutable",
                "name": "fixedInterestAmount",
                "nameLocation": "7137:19:86",
                "nodeType": "VariableDeclaration",
                "scope": 61100,
                "src": "7129:27:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 61093,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "7129:7:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61096,
                "mutability": "mutable",
                "name": "principalAmount",
                "nameLocation": "7174:15:86",
                "nodeType": "VariableDeclaration",
                "scope": 61100,
                "src": "7166:23:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 61095,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "7166:7:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61099,
                "mutability": "mutable",
                "name": "collateral",
                "nameLocation": "7216:10:86",
                "nodeType": "VariableDeclaration",
                "scope": 61100,
                "src": "7199:27:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                  "typeString": "struct MultiToken.Asset"
                },
                "typeName": {
                  "id": 61098,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 61097,
                    "name": "MultiToken.Asset",
                    "nameLocations": [
                      "7199:10:86",
                      "7210:5:86"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 60,
                    "src": "7199:16:86"
                  },
                  "referencedDeclaration": 60,
                  "src": "7199:16:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                    "typeString": "struct MultiToken.Asset"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "LOAN",
            "nameLocation": "6858:4:86",
            "scope": 63281,
            "visibility": "public"
          },
          {
            "id": 61106,
            "nodeType": "VariableDeclaration",
            "src": "7299:39:86",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 61101,
              "nodeType": "StructuredDocumentation",
              "src": "7239:55:86",
              "text": " Mapping of all LOAN data by loan id."
            },
            "mutability": "mutable",
            "name": "LOANs",
            "nameLocation": "7333:5:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
              "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN)"
            },
            "typeName": {
              "id": 61105,
              "keyType": {
                "id": 61102,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "7308:7:86",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "7299:25:86",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN)"
              },
              "valueType": {
                "id": 61104,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 61103,
                  "name": "LOAN",
                  "nameLocations": [
                    "7319:4:86"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 61100,
                  "src": "7319:4:86"
                },
                "referencedDeclaration": 61100,
                "src": "7319:4:86",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                  "typeString": "struct PWNSimpleLoan.LOAN"
                }
              }
            },
            "visibility": "private"
          },
          {
            "id": 61123,
            "nodeType": "StructDefinition",
            "src": "8026:258:86",
            "nodes": [],
            "canonicalName": "PWNSimpleLoan.ExtensionProposal",
            "members": [
              {
                "constant": false,
                "id": 61108,
                "mutability": "mutable",
                "name": "loanId",
                "nameLocation": "8069:6:86",
                "nodeType": "VariableDeclaration",
                "scope": 61123,
                "src": "8061:14:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 61107,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "8061:7:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61110,
                "mutability": "mutable",
                "name": "compensationAddress",
                "nameLocation": "8093:19:86",
                "nodeType": "VariableDeclaration",
                "scope": 61123,
                "src": "8085:27:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 61109,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "8085:7:86",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61112,
                "mutability": "mutable",
                "name": "compensationAmount",
                "nameLocation": "8130:18:86",
                "nodeType": "VariableDeclaration",
                "scope": 61123,
                "src": "8122:26:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 61111,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "8122:7:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61114,
                "mutability": "mutable",
                "name": "duration",
                "nameLocation": "8165:8:86",
                "nodeType": "VariableDeclaration",
                "scope": 61123,
                "src": "8158:15:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint40",
                  "typeString": "uint40"
                },
                "typeName": {
                  "id": 61113,
                  "name": "uint40",
                  "nodeType": "ElementaryTypeName",
                  "src": "8158:6:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61116,
                "mutability": "mutable",
                "name": "expiration",
                "nameLocation": "8190:10:86",
                "nodeType": "VariableDeclaration",
                "scope": 61123,
                "src": "8183:17:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint40",
                  "typeString": "uint40"
                },
                "typeName": {
                  "id": 61115,
                  "name": "uint40",
                  "nodeType": "ElementaryTypeName",
                  "src": "8183:6:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61118,
                "mutability": "mutable",
                "name": "proposer",
                "nameLocation": "8218:8:86",
                "nodeType": "VariableDeclaration",
                "scope": 61123,
                "src": "8210:16:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 61117,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "8210:7:86",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61120,
                "mutability": "mutable",
                "name": "nonceSpace",
                "nameLocation": "8244:10:86",
                "nodeType": "VariableDeclaration",
                "scope": 61123,
                "src": "8236:18:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 61119,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "8236:7:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 61122,
                "mutability": "mutable",
                "name": "nonce",
                "nameLocation": "8272:5:86",
                "nodeType": "VariableDeclaration",
                "scope": 61123,
                "src": "8264:13:86",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 61121,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "8264:7:86",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "ExtensionProposal",
            "nameLocation": "8033:17:86",
            "scope": 63281,
            "visibility": "public"
          },
          {
            "id": 61128,
            "nodeType": "VariableDeclaration",
            "src": "8393:55:86",
            "nodes": [],
            "constant": false,
            "documentation": {
              "id": 61124,
              "nodeType": "StructuredDocumentation",
              "src": "8290:98:86",
              "text": " Mapping of extension proposals made via on-chain transaction by extension hash."
            },
            "functionSelector": "640d16ed",
            "mutability": "mutable",
            "name": "extensionProposalsMade",
            "nameLocation": "8426:22:86",
            "scope": 63281,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
              "typeString": "mapping(bytes32 => bool)"
            },
            "typeName": {
              "id": 61127,
              "keyType": {
                "id": 61125,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "8402:7:86",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "8393:25:86",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                "typeString": "mapping(bytes32 => bool)"
              },
              "valueType": {
                "id": 61126,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "8413:4:86",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 61145,
            "nodeType": "EventDefinition",
            "src": "8725:155:86",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 61129,
              "nodeType": "StructuredDocumentation",
              "src": "8658:62:86",
              "text": " @notice Emitted when a new loan in created."
            },
            "eventSelector": "faeed8c21a13a10e299d00abac61501436fa5faf27ddd94540a3815fb98ce737",
            "name": "LOANCreated",
            "nameLocation": "8731:11:86",
            "parameters": {
              "id": 61144,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61131,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "8759:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61145,
                  "src": "8743:22:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61130,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8743:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61133,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "proposalHash",
                  "nameLocation": "8783:12:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61145,
                  "src": "8767:28:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 61132,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8767:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61135,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "proposalContract",
                  "nameLocation": "8813:16:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61145,
                  "src": "8797:32:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61134,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8797:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61138,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "terms",
                  "nameLocation": "8837:5:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61145,
                  "src": "8831:11:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                    "typeString": "struct PWNSimpleLoan.Terms"
                  },
                  "typeName": {
                    "id": 61137,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61136,
                      "name": "Terms",
                      "nameLocations": [
                        "8831:5:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61054,
                      "src": "8831:5:86"
                    },
                    "referencedDeclaration": 61054,
                    "src": "8831:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Terms_$61054_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.Terms"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61141,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "lenderSpec",
                  "nameLocation": "8855:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61145,
                  "src": "8844:21:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_LenderSpec_$61067_memory_ptr",
                    "typeString": "struct PWNSimpleLoan.LenderSpec"
                  },
                  "typeName": {
                    "id": 61140,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61139,
                      "name": "LenderSpec",
                      "nameLocations": [
                        "8844:10:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61067,
                      "src": "8844:10:86"
                    },
                    "referencedDeclaration": 61067,
                    "src": "8844:10:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LenderSpec_$61067_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.LenderSpec"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61143,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "extra",
                  "nameLocation": "8873:5:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61145,
                  "src": "8867:11:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 61142,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8867:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8742:137:86"
            }
          },
          {
            "id": 61152,
            "nodeType": "EventDefinition",
            "src": "8952:79:86",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 61146,
              "nodeType": "StructuredDocumentation",
              "src": "8886:61:86",
              "text": " @notice Emitted when a loan is refinanced."
            },
            "eventSelector": "dcebfa2e6797f7ce57def09d53b735c278982e3b8c71c9fa63f167148c4cab37",
            "name": "LOANRefinanced",
            "nameLocation": "8958:14:86",
            "parameters": {
              "id": 61151,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61148,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "8989:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61152,
                  "src": "8973:22:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61147,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8973:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61150,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "refinancedLoanId",
                  "nameLocation": "9013:16:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61152,
                  "src": "8997:32:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61149,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8997:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8972:58:86"
            }
          },
          {
            "id": 61157,
            "nodeType": "EventDefinition",
            "src": "9102:43:86",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 61153,
              "nodeType": "StructuredDocumentation",
              "src": "9037:60:86",
              "text": " @notice Emitted when a loan is paid back."
            },
            "eventSelector": "f1e5b832ef53e7d611651983b38ff941f4d2049e9c8962c623c2664bca312bc0",
            "name": "LOANPaidBack",
            "nameLocation": "9108:12:86",
            "parameters": {
              "id": 61156,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61155,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "9137:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61157,
                  "src": "9121:22:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61154,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9121:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9120:24:86"
            }
          },
          {
            "id": 61164,
            "nodeType": "EventDefinition",
            "src": "9234:66:86",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 61158,
              "nodeType": "StructuredDocumentation",
              "src": "9151:78:86",
              "text": " @notice Emitted when a repaid or defaulted loan is claimed."
            },
            "eventSelector": "01c41914692eda9e423c83b28344603636e57a2803060f6778fea9ba50e71b73",
            "name": "LOANClaimed",
            "nameLocation": "9240:11:86",
            "parameters": {
              "id": 61163,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61160,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "9268:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61164,
                  "src": "9252:22:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61159,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9252:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61162,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "defaulted",
                  "nameLocation": "9289:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61164,
                  "src": "9276:22:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 61161,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9276:4:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9251:48:86"
            }
          },
          {
            "id": 61173,
            "nodeType": "EventDefinition",
            "src": "9386:109:86",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 61165,
              "nodeType": "StructuredDocumentation",
              "src": "9306:75:86",
              "text": " @notice Emitted when a LOAN token holder extends a loan."
            },
            "eventSelector": "16e70f82a9a68fdbf6cc67068dcfadcaf1e0c61409aa3a24122767789ccc20d5",
            "name": "LOANExtended",
            "nameLocation": "9392:12:86",
            "parameters": {
              "id": 61172,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61167,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "9421:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61173,
                  "src": "9405:22:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61166,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9405:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61169,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "originalDefaultTimestamp",
                  "nameLocation": "9436:24:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61173,
                  "src": "9429:31:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 61168,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "9429:6:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61171,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "extendedDefaultTimestamp",
                  "nameLocation": "9469:24:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61173,
                  "src": "9462:31:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 61170,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "9462:6:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9404:90:86"
            }
          },
          {
            "id": 61183,
            "nodeType": "EventDefinition",
            "src": "9580:114:86",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 61174,
              "nodeType": "StructuredDocumentation",
              "src": "9501:74:86",
              "text": " @notice Emitted when a loan extension proposal is made."
            },
            "eventSelector": "3404b1a797c8c84bf93d13290f9f6e7464634602778a1ffa1fc7d8708668022e",
            "name": "ExtensionProposalMade",
            "nameLocation": "9586:21:86",
            "parameters": {
              "id": 61182,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61176,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "extensionHash",
                  "nameLocation": "9624:13:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61183,
                  "src": "9608:29:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 61175,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9608:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61178,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "proposer",
                  "nameLocation": "9655:8:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61183,
                  "src": "9639:24:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61177,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9639:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61181,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "proposal",
                  "nameLocation": "9684:8:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61183,
                  "src": "9666:26:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ExtensionProposal_$61123_memory_ptr",
                    "typeString": "struct PWNSimpleLoan.ExtensionProposal"
                  },
                  "typeName": {
                    "id": 61180,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61179,
                      "name": "ExtensionProposal",
                      "nameLocations": [
                        "9666:17:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61123,
                      "src": "9666:17:86"
                    },
                    "referencedDeclaration": 61123,
                    "src": "9666:17:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExtensionProposal_$61123_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.ExtensionProposal"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9607:86:86"
            }
          },
          {
            "id": 61186,
            "nodeType": "ErrorDefinition",
            "src": "9971:23:86",
            "nodes": [],
            "documentation": {
              "id": 61184,
              "nodeType": "StructuredDocumentation",
              "src": "9903:63:86",
              "text": " @notice Thrown when managed loan is running."
            },
            "errorSelector": "31fe4d5d",
            "name": "LoanNotRunning",
            "nameLocation": "9977:14:86",
            "parameters": {
              "id": 61185,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9991:2:86"
            }
          },
          {
            "id": 61189,
            "nodeType": "ErrorDefinition",
            "src": "10073:20:86",
            "nodes": [],
            "documentation": {
              "id": 61187,
              "nodeType": "StructuredDocumentation",
              "src": "10000:68:86",
              "text": " @notice Thrown when manged loan is still running."
            },
            "errorSelector": "8e80f958",
            "name": "LoanRunning",
            "nameLocation": "10079:11:86",
            "parameters": {
              "id": 61188,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10090:2:86"
            }
          },
          {
            "id": 61192,
            "nodeType": "ErrorDefinition",
            "src": "10166:19:86",
            "nodes": [],
            "documentation": {
              "id": 61190,
              "nodeType": "StructuredDocumentation",
              "src": "10099:62:86",
              "text": " @notice Thrown when managed loan is repaid."
            },
            "errorSelector": "1062e18f",
            "name": "LoanRepaid",
            "nameLocation": "10172:10:86",
            "parameters": {
              "id": 61191,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10182:2:86"
            }
          },
          {
            "id": 61197,
            "nodeType": "ErrorDefinition",
            "src": "10261:28:86",
            "nodes": [],
            "documentation": {
              "id": 61193,
              "nodeType": "StructuredDocumentation",
              "src": "10191:65:86",
              "text": " @notice Thrown when managed loan is defaulted."
            },
            "errorSelector": "1e3cd615",
            "name": "LoanDefaulted",
            "nameLocation": "10267:13:86",
            "parameters": {
              "id": 61196,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61195,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 61197,
                  "src": "10281:6:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 61194,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "10281:6:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10280:8:86"
            }
          },
          {
            "id": 61200,
            "nodeType": "ErrorDefinition",
            "src": "10358:24:86",
            "nodes": [],
            "documentation": {
              "id": 61198,
              "nodeType": "StructuredDocumentation",
              "src": "10295:58:86",
              "text": " @notice Thrown when loan doesn't exist."
            },
            "errorSelector": "35cee395",
            "name": "NonExistingLoan",
            "nameLocation": "10364:15:86",
            "parameters": {
              "id": 61199,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10379:2:86"
            }
          },
          {
            "id": 61203,
            "nodeType": "ErrorDefinition",
            "src": "10466:33:86",
            "nodes": [],
            "documentation": {
              "id": 61201,
              "nodeType": "StructuredDocumentation",
              "src": "10388:73:86",
              "text": " @notice Thrown when caller is not a LOAN token holder."
            },
            "errorSelector": "54147b02",
            "name": "CallerNotLOANTokenHolder",
            "nameLocation": "10472:24:86",
            "parameters": {
              "id": 61202,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10496:2:86"
            }
          },
          {
            "id": 61210,
            "nodeType": "ErrorDefinition",
            "src": "10619:78:86",
            "nodes": [],
            "documentation": {
              "id": 61204,
              "nodeType": "StructuredDocumentation",
              "src": "10505:109:86",
              "text": " @notice Thrown when refinancing loan terms have different borrower than the original loan."
            },
            "errorSelector": "d4b919f7",
            "name": "RefinanceBorrowerMismatch",
            "nameLocation": "10625:25:86",
            "parameters": {
              "id": 61209,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61206,
                  "mutability": "mutable",
                  "name": "currentBorrower",
                  "nameLocation": "10659:15:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61210,
                  "src": "10651:23:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61205,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10651:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61208,
                  "mutability": "mutable",
                  "name": "newBorrower",
                  "nameLocation": "10684:11:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61210,
                  "src": "10676:19:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61207,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10676:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10650:46:86"
            }
          },
          {
            "id": 61213,
            "nodeType": "ErrorDefinition",
            "src": "10821:32:86",
            "nodes": [],
            "documentation": {
              "id": 61211,
              "nodeType": "StructuredDocumentation",
              "src": "10703:113:86",
              "text": " @notice Thrown when refinancing loan terms have different credit asset than the original loan."
            },
            "errorSelector": "bf0c18c2",
            "name": "RefinanceCreditMismatch",
            "nameLocation": "10827:23:86",
            "parameters": {
              "id": 61212,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10850:2:86"
            }
          },
          {
            "id": 61216,
            "nodeType": "ErrorDefinition",
            "src": "10981:36:86",
            "nodes": [],
            "documentation": {
              "id": 61214,
              "nodeType": "StructuredDocumentation",
              "src": "10859:117:86",
              "text": " @notice Thrown when refinancing loan terms have different collateral asset than the original loan."
            },
            "errorSelector": "5d6ec6dc",
            "name": "RefinanceCollateralMismatch",
            "nameLocation": "10987:27:86",
            "parameters": {
              "id": 61215,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11014:2:86"
            }
          },
          {
            "id": 61223,
            "nodeType": "ErrorDefinition",
            "src": "11132:63:86",
            "nodes": [],
            "documentation": {
              "id": 61217,
              "nodeType": "StructuredDocumentation",
              "src": "11023:104:86",
              "text": " @notice Thrown when hash of provided lender spec doesn't match the one in loan terms."
            },
            "errorSelector": "6311eada",
            "name": "InvalidLenderSpecHash",
            "nameLocation": "11138:21:86",
            "parameters": {
              "id": 61222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61219,
                  "mutability": "mutable",
                  "name": "current",
                  "nameLocation": "11168:7:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61223,
                  "src": "11160:15:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 61218,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11160:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61221,
                  "mutability": "mutable",
                  "name": "expected",
                  "nameLocation": "11185:8:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61223,
                  "src": "11177:16:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 61220,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11177:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11159:35:86"
            }
          },
          {
            "id": 61230,
            "nodeType": "ErrorDefinition",
            "src": "11280:54:86",
            "nodes": [],
            "documentation": {
              "id": 61224,
              "nodeType": "StructuredDocumentation",
              "src": "11201:74:86",
              "text": " @notice Thrown when loan duration is below the minimum."
            },
            "errorSelector": "387a058b",
            "name": "InvalidDuration",
            "nameLocation": "11286:15:86",
            "parameters": {
              "id": 61229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61226,
                  "mutability": "mutable",
                  "name": "current",
                  "nameLocation": "11310:7:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61230,
                  "src": "11302:15:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61225,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11302:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61228,
                  "mutability": "mutable",
                  "name": "limit",
                  "nameLocation": "11327:5:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61230,
                  "src": "11319:13:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61227,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11319:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11301:32:86"
            }
          },
          {
            "id": 61237,
            "nodeType": "ErrorDefinition",
            "src": "11427:61:86",
            "nodes": [],
            "documentation": {
              "id": 61231,
              "nodeType": "StructuredDocumentation",
              "src": "11340:82:86",
              "text": " @notice Thrown when accruing interest APR is above the maximum."
            },
            "errorSelector": "fb8adc50",
            "name": "InterestAPROutOfBounds",
            "nameLocation": "11433:22:86",
            "parameters": {
              "id": 61236,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61233,
                  "mutability": "mutable",
                  "name": "current",
                  "nameLocation": "11464:7:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61237,
                  "src": "11456:15:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61232,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11456:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61235,
                  "mutability": "mutable",
                  "name": "limit",
                  "nameLocation": "11481:5:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61237,
                  "src": "11473:13:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61234,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11473:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11455:32:86"
            }
          },
          {
            "id": 61240,
            "nodeType": "ErrorDefinition",
            "src": "11560:23:86",
            "nodes": [],
            "documentation": {
              "id": 61238,
              "nodeType": "StructuredDocumentation",
              "src": "11494:61:86",
              "text": " @notice Thrown when caller is not a vault."
            },
            "errorSelector": "edd7338f",
            "name": "CallerNotVault",
            "nameLocation": "11566:14:86",
            "parameters": {
              "id": 61239,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11580:2:86"
            }
          },
          {
            "id": 61245,
            "nodeType": "ErrorDefinition",
            "src": "11694:50:86",
            "nodes": [],
            "documentation": {
              "id": 61241,
              "nodeType": "StructuredDocumentation",
              "src": "11589:100:86",
              "text": " @notice Thrown when pool based source of funds doesn't have a registered adapter."
            },
            "errorSelector": "5f2a4d86",
            "name": "InvalidSourceOfFunds",
            "nameLocation": "11700:20:86",
            "parameters": {
              "id": 61244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61243,
                  "mutability": "mutable",
                  "name": "sourceOfFunds",
                  "nameLocation": "11729:13:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61245,
                  "src": "11721:21:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61242,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11721:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11720:23:86"
            }
          },
          {
            "id": 61248,
            "nodeType": "ErrorDefinition",
            "src": "11834:31:86",
            "nodes": [],
            "documentation": {
              "id": 61246,
              "nodeType": "StructuredDocumentation",
              "src": "11750:79:86",
              "text": " @notice Thrown when caller is not a loan borrower or lender."
            },
            "errorSelector": "9d29f3a9",
            "name": "InvalidExtensionCaller",
            "nameLocation": "11840:22:86",
            "parameters": {
              "id": 61247,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11862:2:86"
            }
          },
          {
            "id": 61255,
            "nodeType": "ErrorDefinition",
            "src": "11955:63:86",
            "nodes": [],
            "documentation": {
              "id": 61249,
              "nodeType": "StructuredDocumentation",
              "src": "11871:79:86",
              "text": " @notice Thrown when signer is not a loan extension proposer."
            },
            "errorSelector": "03e2f438",
            "name": "InvalidExtensionSigner",
            "nameLocation": "11961:22:86",
            "parameters": {
              "id": 61254,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61251,
                  "mutability": "mutable",
                  "name": "allowed",
                  "nameLocation": "11992:7:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61255,
                  "src": "11984:15:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61250,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11984:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61253,
                  "mutability": "mutable",
                  "name": "current",
                  "nameLocation": "12009:7:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61255,
                  "src": "12001:15:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61252,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12001:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11983:34:86"
            }
          },
          {
            "id": 61262,
            "nodeType": "ErrorDefinition",
            "src": "12109:64:86",
            "nodes": [],
            "documentation": {
              "id": 61256,
              "nodeType": "StructuredDocumentation",
              "src": "12024:80:86",
              "text": " @notice Thrown when loan extension duration is out of bounds."
            },
            "errorSelector": "342d5662",
            "name": "InvalidExtensionDuration",
            "nameLocation": "12115:24:86",
            "parameters": {
              "id": 61261,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61258,
                  "mutability": "mutable",
                  "name": "duration",
                  "nameLocation": "12148:8:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61262,
                  "src": "12140:16:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61257,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12140:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61260,
                  "mutability": "mutable",
                  "name": "limit",
                  "nameLocation": "12166:5:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61262,
                  "src": "12158:13:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61259,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12158:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12139:33:86"
            }
          },
          {
            "id": 61273,
            "nodeType": "ErrorDefinition",
            "src": "12324:87:86",
            "nodes": [],
            "documentation": {
              "id": 61263,
              "nodeType": "StructuredDocumentation",
              "src": "12179:140:86",
              "text": " @notice Thrown when MultiToken.Asset is invalid.\n @dev Could be because of invalid category, address, id or amount."
            },
            "errorSelector": "0642c7c2",
            "name": "InvalidMultiTokenAsset",
            "nameLocation": "12330:22:86",
            "parameters": {
              "id": 61272,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61265,
                  "mutability": "mutable",
                  "name": "category",
                  "nameLocation": "12359:8:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61273,
                  "src": "12353:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 61264,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "12353:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61267,
                  "mutability": "mutable",
                  "name": "addr",
                  "nameLocation": "12377:4:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61273,
                  "src": "12369:12:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61266,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12369:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61269,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "12391:2:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61273,
                  "src": "12383:10:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61268,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12383:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61271,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "12403:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61273,
                  "src": "12395:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61270,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12395:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12352:58:86"
            }
          },
          {
            "id": 61317,
            "nodeType": "FunctionDefinition",
            "src": "12620:402:86",
            "nodes": [],
            "body": {
              "id": 61316,
              "nodeType": "Block",
              "src": "12779:243:86",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 61290,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 61286,
                      "name": "hub",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61021,
                      "src": "12789:3:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNHub_$60517",
                        "typeString": "contract PWNHub"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 61288,
                          "name": "_hub",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61275,
                          "src": "12802:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 61287,
                        "name": "PWNHub",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60517,
                        "src": "12795:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PWNHub_$60517_$",
                          "typeString": "type(contract PWNHub)"
                        }
                      },
                      "id": 61289,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12795:12:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNHub_$60517",
                        "typeString": "contract PWNHub"
                      }
                    },
                    "src": "12789:18:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PWNHub_$60517",
                      "typeString": "contract PWNHub"
                    }
                  },
                  "id": 61291,
                  "nodeType": "ExpressionStatement",
                  "src": "12789:18:86"
                },
                {
                  "expression": {
                    "id": 61296,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 61292,
                      "name": "loanToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61024,
                      "src": "12817:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNLOAN_$65743",
                        "typeString": "contract PWNLOAN"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 61294,
                          "name": "_loanToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61277,
                          "src": "12837:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 61293,
                        "name": "PWNLOAN",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 65743,
                        "src": "12829:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PWNLOAN_$65743_$",
                          "typeString": "type(contract PWNLOAN)"
                        }
                      },
                      "id": 61295,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12829:19:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNLOAN_$65743",
                        "typeString": "contract PWNLOAN"
                      }
                    },
                    "src": "12817:31:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PWNLOAN_$65743",
                      "typeString": "contract PWNLOAN"
                    }
                  },
                  "id": 61297,
                  "nodeType": "ExpressionStatement",
                  "src": "12817:31:86"
                },
                {
                  "expression": {
                    "id": 61302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 61298,
                      "name": "config",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61027,
                      "src": "12858:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNConfig_$60390",
                        "typeString": "contract PWNConfig"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 61300,
                          "name": "_config",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61279,
                          "src": "12877:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 61299,
                        "name": "PWNConfig",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60390,
                        "src": "12867:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PWNConfig_$60390_$",
                          "typeString": "type(contract PWNConfig)"
                        }
                      },
                      "id": 61301,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12867:18:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNConfig_$60390",
                        "typeString": "contract PWNConfig"
                      }
                    },
                    "src": "12858:27:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PWNConfig_$60390",
                      "typeString": "contract PWNConfig"
                    }
                  },
                  "id": 61303,
                  "nodeType": "ExpressionStatement",
                  "src": "12858:27:86"
                },
                {
                  "expression": {
                    "id": 61308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 61304,
                      "name": "revokedNonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61030,
                      "src": "12895:12:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNRevokedNonce_$66596",
                        "typeString": "contract PWNRevokedNonce"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 61306,
                          "name": "_revokedNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61281,
                          "src": "12926:13:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 61305,
                        "name": "PWNRevokedNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 66596,
                        "src": "12910:15:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PWNRevokedNonce_$66596_$",
                          "typeString": "type(contract PWNRevokedNonce)"
                        }
                      },
                      "id": 61307,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12910:30:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_PWNRevokedNonce_$66596",
                        "typeString": "contract PWNRevokedNonce"
                      }
                    },
                    "src": "12895:45:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_PWNRevokedNonce_$66596",
                      "typeString": "contract PWNRevokedNonce"
                    }
                  },
                  "id": 61309,
                  "nodeType": "ExpressionStatement",
                  "src": "12895:45:86"
                },
                {
                  "expression": {
                    "id": 61314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 61310,
                      "name": "categoryRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61033,
                      "src": "12950:16:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IMultiTokenCategoryRegistry_$96523",
                        "typeString": "contract IMultiTokenCategoryRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 61312,
                          "name": "_categoryRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61283,
                          "src": "12997:17:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 61311,
                        "name": "IMultiTokenCategoryRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 96523,
                        "src": "12969:27:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IMultiTokenCategoryRegistry_$96523_$",
                          "typeString": "type(contract IMultiTokenCategoryRegistry)"
                        }
                      },
                      "id": 61313,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12969:46:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IMultiTokenCategoryRegistry_$96523",
                        "typeString": "contract IMultiTokenCategoryRegistry"
                      }
                    },
                    "src": "12950:65:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IMultiTokenCategoryRegistry_$96523",
                      "typeString": "contract IMultiTokenCategoryRegistry"
                    }
                  },
                  "id": 61315,
                  "nodeType": "ExpressionStatement",
                  "src": "12950:65:86"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 61284,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61275,
                  "mutability": "mutable",
                  "name": "_hub",
                  "nameLocation": "12649:4:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61317,
                  "src": "12641:12:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61274,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12641:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61277,
                  "mutability": "mutable",
                  "name": "_loanToken",
                  "nameLocation": "12671:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61317,
                  "src": "12663:18:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61276,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12663:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61279,
                  "mutability": "mutable",
                  "name": "_config",
                  "nameLocation": "12699:7:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61317,
                  "src": "12691:15:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61278,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12691:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61281,
                  "mutability": "mutable",
                  "name": "_revokedNonce",
                  "nameLocation": "12724:13:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61317,
                  "src": "12716:21:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61280,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12716:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61283,
                  "mutability": "mutable",
                  "name": "_categoryRegistry",
                  "nameLocation": "12755:17:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61317,
                  "src": "12747:25:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61282,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12747:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12631:147:86"
            },
            "returnParameters": {
              "id": 61285,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12779:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 61334,
            "nodeType": "FunctionDefinition",
            "src": "13399:146:86",
            "nodes": [],
            "body": {
              "id": 61333,
              "nodeType": "Block",
              "src": "13488:57:86",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 61329,
                            "name": "lenderSpec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61321,
                            "src": "13526:10:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                            }
                          ],
                          "expression": {
                            "id": 61327,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "13515:3:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 61328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "13519:6:86",
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "13515:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 61330,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13515:22:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 61326,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "13505:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 61331,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13505:33:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 61325,
                  "id": 61332,
                  "nodeType": "Return",
                  "src": "13498:40:86"
                }
              ]
            },
            "documentation": {
              "id": 61318,
              "nodeType": "StructuredDocumentation",
              "src": "13231:163:86",
              "text": " @notice Get hash of a lender specification.\n @param lenderSpec Lender specification struct.\n @return Hash of a lender specification."
            },
            "functionSelector": "c8198080",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLenderSpecHash",
            "nameLocation": "13408:17:86",
            "parameters": {
              "id": 61322,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61321,
                  "mutability": "mutable",
                  "name": "lenderSpec",
                  "nameLocation": "13446:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61334,
                  "src": "13426:30:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                    "typeString": "struct PWNSimpleLoan.LenderSpec"
                  },
                  "typeName": {
                    "id": 61320,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61319,
                      "name": "LenderSpec",
                      "nameLocations": [
                        "13426:10:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61067,
                      "src": "13426:10:86"
                    },
                    "referencedDeclaration": 61067,
                    "src": "13426:10:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LenderSpec_$61067_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.LenderSpec"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13425:32:86"
            },
            "returnParameters": {
              "id": 61325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61324,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 61334,
                  "src": "13479:7:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 61323,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "13479:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13478:9:86"
            },
            "scope": 63281,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 61566,
            "nodeType": "FunctionDefinition",
            "src": "14240:3748:86",
            "nodes": [],
            "body": {
              "id": 61565,
              "nodeType": "Block",
              "src": "14454:3534:86",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 61358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "14512:68:86",
                    "subExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 61353,
                            "name": "proposalSpec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61338,
                            "src": "14524:12:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProposalSpec_$61064_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ProposalSpec calldata"
                            }
                          },
                          "id": 61354,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "14537:16:86",
                          "memberName": "proposalContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61056,
                          "src": "14524:29:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "expression": {
                            "id": 61355,
                            "name": "PWNHubTags",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 60604,
                            "src": "14555:10:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_PWNHubTags_$60604_$",
                              "typeString": "type(library PWNHubTags)"
                            }
                          },
                          "id": 61356,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "14566:13:86",
                          "memberName": "LOAN_PROPOSAL",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 60597,
                          "src": "14555:24:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 61351,
                          "name": "hub",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61021,
                          "src": "14513:3:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_PWNHub_$60517",
                            "typeString": "contract PWNHub"
                          }
                        },
                        "id": 61352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14517:6:86",
                        "memberName": "hasTag",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 60516,
                        "src": "14513:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (address,bytes32) view external returns (bool)"
                        }
                      },
                      "id": 61357,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14513:67:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61367,
                  "nodeType": "IfStatement",
                  "src": "14508:198:86",
                  "trueBody": {
                    "id": 61366,
                    "nodeType": "Block",
                    "src": "14582:124:86",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61360,
                                "name": "proposalSpec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61338,
                                "src": "14632:12:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ProposalSpec_$61064_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.ProposalSpec calldata"
                                }
                              },
                              "id": 61361,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14645:16:86",
                              "memberName": "proposalContract",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61056,
                              "src": "14632:29:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 61362,
                                "name": "PWNHubTags",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 60604,
                                "src": "14668:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_PWNHubTags_$60604_$",
                                  "typeString": "type(library PWNHubTags)"
                                }
                              },
                              "id": 61363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "14679:13:86",
                              "memberName": "LOAN_PROPOSAL",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 60597,
                              "src": "14668:24:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 61359,
                            "name": "AddressMissingHubTag",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 59971,
                            "src": "14603:20:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$_t_address_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,bytes32) pure"
                            }
                          },
                          "id": 61364,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "14626:4:86",
                            "14663:3:86"
                          ],
                          "names": [
                            "addr",
                            "tag"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "14603:92:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61365,
                        "nodeType": "RevertStatement",
                        "src": "14596:99:86"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "expression": {
                      "id": 61368,
                      "name": "callerSpec",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61344,
                      "src": "14754:10:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                        "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                      }
                    },
                    "id": 61369,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "14765:11:86",
                    "memberName": "revokeNonce",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 61071,
                    "src": "14754:22:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61380,
                  "nodeType": "IfStatement",
                  "src": "14750:107:86",
                  "trueBody": {
                    "id": 61379,
                    "nodeType": "Block",
                    "src": "14778:79:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61373,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "14817:3:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 61374,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14821:6:86",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "14817:10:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 61375,
                                "name": "callerSpec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61344,
                                "src": "14829:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                                }
                              },
                              "id": 61376,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14840:5:86",
                              "memberName": "nonce",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61073,
                              "src": "14829:16:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 61370,
                              "name": "revokedNonce",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61030,
                              "src": "14792:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PWNRevokedNonce_$66596",
                                "typeString": "contract PWNRevokedNonce"
                              }
                            },
                            "id": 61372,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14805:11:86",
                            "memberName": "revokeNonce",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 66448,
                            "src": "14792:24:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256) external"
                            }
                          },
                          "id": 61377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14792:54:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61378,
                        "nodeType": "ExpressionStatement",
                        "src": "14792:54:86"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 61384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 61381,
                        "name": "callerSpec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61344,
                        "src": "14939:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                        }
                      },
                      "id": 61382,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14950:17:86",
                      "memberName": "refinancingLoanId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61069,
                      "src": "14939:28:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 61383,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14971:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14939:33:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61401,
                  "nodeType": "IfStatement",
                  "src": "14935:190:86",
                  "trueBody": {
                    "id": 61400,
                    "nodeType": "Block",
                    "src": "14974:151:86",
                    "statements": [
                      {
                        "assignments": [
                          61387
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 61387,
                            "mutability": "mutable",
                            "name": "loan",
                            "nameLocation": "15001:4:86",
                            "nodeType": "VariableDeclaration",
                            "scope": 61400,
                            "src": "14988:17:86",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                              "typeString": "struct PWNSimpleLoan.LOAN"
                            },
                            "typeName": {
                              "id": 61386,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 61385,
                                "name": "LOAN",
                                "nameLocations": [
                                  "14988:4:86"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 61100,
                                "src": "14988:4:86"
                              },
                              "referencedDeclaration": 61100,
                              "src": "14988:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                "typeString": "struct PWNSimpleLoan.LOAN"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 61392,
                        "initialValue": {
                          "baseExpression": {
                            "id": 61388,
                            "name": "LOANs",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61106,
                            "src": "15008:5:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                              "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                            }
                          },
                          "id": 61391,
                          "indexExpression": {
                            "expression": {
                              "id": 61389,
                              "name": "callerSpec",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61344,
                              "src": "15014:10:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                              }
                            },
                            "id": 61390,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15025:17:86",
                            "memberName": "refinancingLoanId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61069,
                            "src": "15014:28:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "15008:35:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                            "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14988:55:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61394,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61387,
                                "src": "15079:4:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                  "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                }
                              },
                              "id": 61395,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15084:6:86",
                              "memberName": "status",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61078,
                              "src": "15079:11:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "expression": {
                                "id": 61396,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61387,
                                "src": "15092:4:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                  "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                }
                              },
                              "id": 61397,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15097:16:86",
                              "memberName": "defaultTimestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61086,
                              "src": "15092:21:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            ],
                            "id": 61393,
                            "name": "_checkLoanCanBeRepaid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62316,
                            "src": "15057:21:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint8_$_t_uint40_$returns$__$",
                              "typeString": "function (uint8,uint40) view"
                            }
                          },
                          "id": 61398,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15057:57:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61399,
                        "nodeType": "ExpressionStatement",
                        "src": "15057:57:86"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    61403,
                    61406
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61403,
                      "mutability": "mutable",
                      "name": "proposalHash",
                      "nameLocation": "15190:12:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 61565,
                      "src": "15182:20:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 61402,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "15182:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 61406,
                      "mutability": "mutable",
                      "name": "loanTerms",
                      "nameLocation": "15217:9:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 61565,
                      "src": "15204:22:86",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                        "typeString": "struct PWNSimpleLoan.Terms"
                      },
                      "typeName": {
                        "id": 61405,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 61404,
                          "name": "Terms",
                          "nameLocations": [
                            "15204:5:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61054,
                          "src": "15204:5:86"
                        },
                        "referencedDeclaration": 61054,
                        "src": "15204:5:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Terms_$61054_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61423,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 61412,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "15339:3:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 61413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15343:6:86",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "15339:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 61414,
                          "name": "callerSpec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61344,
                          "src": "15386:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                          }
                        },
                        "id": 61415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15397:17:86",
                        "memberName": "refinancingLoanId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61069,
                        "src": "15386:28:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 61416,
                          "name": "proposalSpec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61338,
                          "src": "15446:12:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ProposalSpec_$61064_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ProposalSpec calldata"
                          }
                        },
                        "id": 61417,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15459:12:86",
                        "memberName": "proposalData",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61058,
                        "src": "15446:25:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "expression": {
                          "id": 61418,
                          "name": "proposalSpec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61338,
                          "src": "15513:12:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ProposalSpec_$61064_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ProposalSpec calldata"
                          }
                        },
                        "id": 61419,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15526:22:86",
                        "memberName": "proposalInclusionProof",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61061,
                        "src": "15513:35:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      },
                      {
                        "expression": {
                          "id": 61420,
                          "name": "proposalSpec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61338,
                          "src": "15577:12:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ProposalSpec_$61064_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ProposalSpec calldata"
                          }
                        },
                        "id": 61421,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15590:9:86",
                        "memberName": "signature",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61063,
                        "src": "15577:22:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 61408,
                              "name": "proposalSpec",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61338,
                              "src": "15252:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ProposalSpec_$61064_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.ProposalSpec calldata"
                              }
                            },
                            "id": 61409,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15265:16:86",
                            "memberName": "proposalContract",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61056,
                            "src": "15252:29:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 61407,
                          "name": "PWNSimpleLoanProposal",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 65236,
                          "src": "15230:21:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_PWNSimpleLoanProposal_$65236_$",
                            "typeString": "type(contract PWNSimpleLoanProposal)"
                          }
                        },
                        "id": 61410,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15230:52:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PWNSimpleLoanProposal_$65236",
                          "typeString": "contract PWNSimpleLoanProposal"
                        }
                      },
                      "id": 61411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15296:14:86",
                      "memberName": "acceptProposal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 64846,
                      "src": "15230:80:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes32_$_t_struct$_Terms_$61054_memory_ptr_$",
                        "typeString": "function (address,uint256,bytes memory,bytes32[] memory,bytes memory) external returns (bytes32,struct PWNSimpleLoan.Terms memory)"
                      }
                    },
                    "id": 61422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "15329:8:86",
                      "15367:17:86",
                      "15432:12:86",
                      "15489:22:86",
                      "15566:9:86"
                    ],
                    "names": [
                      "acceptor",
                      "refinancingLoanId",
                      "proposalData",
                      "proposalInclusionProof",
                      "signature"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "15230:384:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes32_$_t_struct$_Terms_$61054_memory_ptr_$",
                      "typeString": "tuple(bytes32,struct PWNSimpleLoan.Terms memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15181:433:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 61435,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 61428,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 61424,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "15683:3:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 61425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15687:6:86",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "15683:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "expression": {
                          "id": 61426,
                          "name": "loanTerms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61406,
                          "src": "15697:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          }
                        },
                        "id": 61427,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15707:6:86",
                        "memberName": "lender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61035,
                        "src": "15697:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "15683:30:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 61434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 61429,
                          "name": "loanTerms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61406,
                          "src": "15717:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          }
                        },
                        "id": 61430,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15727:14:86",
                        "memberName": "lenderSpecHash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61051,
                        "src": "15717:24:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [
                          {
                            "id": 61432,
                            "name": "lenderSpec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61341,
                            "src": "15763:10:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                            }
                          ],
                          "id": 61431,
                          "name": "getLenderSpecHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61334,
                          "src": "15745:17:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_struct$_LenderSpec_$61067_calldata_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (struct PWNSimpleLoan.LenderSpec calldata) pure returns (bytes32)"
                          }
                        },
                        "id": 61433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15745:29:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "15717:57:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "15683:91:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61445,
                  "nodeType": "IfStatement",
                  "src": "15679:230:86",
                  "trueBody": {
                    "id": 61444,
                    "nodeType": "Block",
                    "src": "15776:133:86",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61437,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61406,
                                "src": "15830:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 61438,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15840:14:86",
                              "memberName": "lenderSpecHash",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61051,
                              "src": "15830:24:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 61440,
                                  "name": "lenderSpec",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 61341,
                                  "src": "15884:10:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                    "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                    "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                                  }
                                ],
                                "id": 61439,
                                "name": "getLenderSpecHash",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61334,
                                "src": "15866:17:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_struct$_LenderSpec_$61067_calldata_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (struct PWNSimpleLoan.LenderSpec calldata) pure returns (bytes32)"
                                }
                              },
                              "id": 61441,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15866:29:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 61436,
                            "name": "InvalidLenderSpecHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61223,
                            "src": "15797:21:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (bytes32,bytes32) pure"
                            }
                          },
                          "id": 61442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "15821:7:86",
                            "15856:8:86"
                          ],
                          "names": [
                            "current",
                            "expected"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "15797:101:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61443,
                        "nodeType": "RevertStatement",
                        "src": "15790:108:86"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    },
                    "id": 61449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 61446,
                        "name": "loanTerms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61406,
                        "src": "15962:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms memory"
                        }
                      },
                      "id": 61447,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15972:8:86",
                      "memberName": "duration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61039,
                      "src": "15962:18:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 61448,
                      "name": "MIN_LOAN_DURATION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60967,
                      "src": "15983:17:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "15962:38:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61457,
                  "nodeType": "IfStatement",
                  "src": "15958:150:86",
                  "trueBody": {
                    "id": 61456,
                    "nodeType": "Block",
                    "src": "16002:106:86",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61451,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61406,
                                "src": "16050:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 61452,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "16060:8:86",
                              "memberName": "duration",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61039,
                              "src": "16050:18:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            },
                            {
                              "id": 61453,
                              "name": "MIN_LOAN_DURATION",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 60967,
                              "src": "16077:17:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              },
                              {
                                "typeIdentifier": "t_uint32",
                                "typeString": "uint32"
                              }
                            ],
                            "id": 61450,
                            "name": "InvalidDuration",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61230,
                            "src": "16023:15:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) pure"
                            }
                          },
                          "id": 61454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "16041:7:86",
                            "16070:5:86"
                          ],
                          "names": [
                            "current",
                            "limit"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "16023:74:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61455,
                        "nodeType": "RevertStatement",
                        "src": "16016:81:86"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    },
                    "id": 61461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 61458,
                        "name": "loanTerms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61406,
                        "src": "16169:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms memory"
                        }
                      },
                      "id": 61459,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16179:19:86",
                      "memberName": "accruingInterestAPR",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61049,
                      "src": "16169:29:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 61460,
                      "name": "MAX_ACCRUING_INTEREST_APR",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60970,
                      "src": "16201:25:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "16169:57:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61469,
                  "nodeType": "IfStatement",
                  "src": "16165:195:86",
                  "trueBody": {
                    "id": 61468,
                    "nodeType": "Block",
                    "src": "16228:132:86",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61463,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61406,
                                "src": "16283:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 61464,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "16293:19:86",
                              "memberName": "accruingInterestAPR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61049,
                              "src": "16283:29:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            },
                            {
                              "id": 61465,
                              "name": "MAX_ACCRUING_INTEREST_APR",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 60970,
                              "src": "16321:25:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              },
                              {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            ],
                            "id": 61462,
                            "name": "InterestAPROutOfBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61237,
                            "src": "16249:22:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256) pure"
                            }
                          },
                          "id": 61466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "16274:7:86",
                            "16314:5:86"
                          ],
                          "names": [
                            "current",
                            "limit"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "16249:100:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61467,
                        "nodeType": "RevertStatement",
                        "src": "16242:107:86"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 61473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 61470,
                        "name": "callerSpec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61344,
                        "src": "16374:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                        }
                      },
                      "id": 61471,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16385:17:86",
                      "memberName": "refinancingLoanId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61069,
                      "src": "16374:28:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 61472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16406:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "16374:33:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 61491,
                    "nodeType": "Block",
                    "src": "16583:132:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61486,
                                "name": "callerSpec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61344,
                                "src": "16664:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                                }
                              },
                              "id": 61487,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "16675:17:86",
                              "memberName": "refinancingLoanId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61069,
                              "src": "16664:28:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 61488,
                              "name": "loanTerms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61406,
                              "src": "16694:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                "typeString": "struct PWNSimpleLoan.Terms memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                "typeString": "struct PWNSimpleLoan.Terms memory"
                              }
                            ],
                            "id": 61485,
                            "name": "_checkRefinanceLoanTerms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61693,
                            "src": "16639:24:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_struct$_Terms_$61054_memory_ptr_$returns$__$",
                              "typeString": "function (uint256,struct PWNSimpleLoan.Terms memory) view"
                            }
                          },
                          "id": 61489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16639:65:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61490,
                        "nodeType": "ExpressionStatement",
                        "src": "16639:65:86"
                      }
                    ]
                  },
                  "id": 61492,
                  "nodeType": "IfStatement",
                  "src": "16370:345:86",
                  "trueBody": {
                    "id": 61484,
                    "nodeType": "Block",
                    "src": "16409:168:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61475,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61406,
                                "src": "16497:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 61476,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "16507:6:86",
                              "memberName": "credit",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61045,
                              "src": "16497:16:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            ],
                            "id": 61474,
                            "name": "_checkValidAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63222,
                            "src": "16480:16:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Asset_$60_memory_ptr_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory) view"
                            }
                          },
                          "id": 61477,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16480:34:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61478,
                        "nodeType": "ExpressionStatement",
                        "src": "16480:34:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61480,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61406,
                                "src": "16545:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 61481,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "16555:10:86",
                              "memberName": "collateral",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61042,
                              "src": "16545:20:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            ],
                            "id": 61479,
                            "name": "_checkValidAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63222,
                            "src": "16528:16:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Asset_$60_memory_ptr_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory) view"
                            }
                          },
                          "id": 61482,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16528:38:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61483,
                        "nodeType": "ExpressionStatement",
                        "src": "16528:38:86"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 61502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 61493,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61349,
                      "src": "16754:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 61495,
                          "name": "proposalHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61403,
                          "src": "16803:12:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "expression": {
                            "id": 61496,
                            "name": "proposalSpec",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61338,
                            "src": "16847:12:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ProposalSpec_$61064_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ProposalSpec calldata"
                            }
                          },
                          "id": 61497,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "16860:16:86",
                          "memberName": "proposalContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61056,
                          "src": "16847:29:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 61498,
                          "name": "loanTerms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61406,
                          "src": "16901:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          }
                        },
                        {
                          "id": 61499,
                          "name": "lenderSpec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61341,
                          "src": "16936:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                          }
                        },
                        {
                          "id": 61500,
                          "name": "extra",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61346,
                          "src": "16967:5:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "id": 61494,
                        "name": "_createLoan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61831,
                        "src": "16763:11:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_struct$_Terms_$61054_memory_ptr_$_t_struct$_LenderSpec_$61067_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_uint256_$",
                          "typeString": "function (bytes32,address,struct PWNSimpleLoan.Terms memory,struct PWNSimpleLoan.LenderSpec calldata,bytes calldata) returns (uint256)"
                        }
                      },
                      "id": 61501,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [
                        "16789:12:86",
                        "16829:16:86",
                        "16890:9:86",
                        "16924:10:86",
                        "16960:5:86"
                      ],
                      "names": [
                        "proposalHash",
                        "proposalContract",
                        "loanTerms",
                        "lenderSpec",
                        "extra"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "16763:220:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16754:229:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 61503,
                  "nodeType": "ExpressionStatement",
                  "src": "16754:229:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 61508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 61504,
                          "name": "callerSpec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61344,
                          "src": "17039:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                          }
                        },
                        "id": 61505,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "17050:10:86",
                        "memberName": "permitData",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61075,
                        "src": "17039:21:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      "id": 61506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17061:6:86",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "17039:28:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 61507,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17070:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "17039:32:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61534,
                  "nodeType": "IfStatement",
                  "src": "17035:238:86",
                  "trueBody": {
                    "id": 61533,
                    "nodeType": "Block",
                    "src": "17073:200:86",
                    "statements": [
                      {
                        "assignments": [
                          61511
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 61511,
                            "mutability": "mutable",
                            "name": "permit",
                            "nameLocation": "17101:6:86",
                            "nodeType": "VariableDeclaration",
                            "scope": 61533,
                            "src": "17087:20:86",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                              "typeString": "struct Permit"
                            },
                            "typeName": {
                              "id": 61510,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 61509,
                                "name": "Permit",
                                "nameLocations": [
                                  "17087:6:86"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 66282,
                                "src": "17087:6:86"
                              },
                              "referencedDeclaration": 66282,
                              "src": "17087:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Permit_$66282_storage_ptr",
                                "typeString": "struct Permit"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 61519,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61514,
                                "name": "callerSpec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61344,
                                "src": "17121:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                                }
                              },
                              "id": 61515,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "17132:10:86",
                              "memberName": "permitData",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61075,
                              "src": "17121:21:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 61516,
                                  "name": "Permit",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 66282,
                                  "src": "17145:6:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Permit_$66282_storage_ptr_$",
                                    "typeString": "type(struct Permit storage pointer)"
                                  }
                                }
                              ],
                              "id": 61517,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "17144:8:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Permit_$66282_storage_ptr_$",
                                "typeString": "type(struct Permit storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_Permit_$66282_storage_ptr_$",
                                "typeString": "type(struct Permit storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 61512,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "17110:3:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 61513,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "17114:6:86",
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "17110:10:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 61518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17110:43:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                            "typeString": "struct Permit memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "17087:66:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61521,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "17180:3:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 61522,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "17184:6:86",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "17180:10:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "expression": {
                                  "id": 61523,
                                  "name": "loanTerms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 61406,
                                  "src": "17192:9:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                    "typeString": "struct PWNSimpleLoan.Terms memory"
                                  }
                                },
                                "id": 61524,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "17202:6:86",
                                "memberName": "credit",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 61045,
                                "src": "17192:16:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                  "typeString": "struct MultiToken.Asset memory"
                                }
                              },
                              "id": 61525,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "17209:12:86",
                              "memberName": "assetAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 55,
                              "src": "17192:29:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 61526,
                              "name": "permit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61511,
                              "src": "17223:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                "typeString": "struct Permit memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                "typeString": "struct Permit memory"
                              }
                            ],
                            "id": 61520,
                            "name": "_checkPermit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61611,
                            "src": "17167:12:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_struct$_Permit_$66282_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,struct Permit memory) pure"
                            }
                          },
                          "id": 61527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17167:63:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61528,
                        "nodeType": "ExpressionStatement",
                        "src": "17167:63:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 61530,
                              "name": "permit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61511,
                              "src": "17255:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                "typeString": "struct Permit memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                "typeString": "struct Permit memory"
                              }
                            ],
                            "id": 61529,
                            "name": "_tryPermit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66148,
                            "src": "17244:10:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Permit_$66282_memory_ptr_$returns$__$",
                              "typeString": "function (struct Permit memory)"
                            }
                          },
                          "id": 61531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17244:18:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61532,
                        "nodeType": "ExpressionStatement",
                        "src": "17244:18:86"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 61538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 61535,
                        "name": "callerSpec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61344,
                        "src": "17314:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                        }
                      },
                      "id": 61536,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17325:17:86",
                      "memberName": "refinancingLoanId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61069,
                      "src": "17314:28:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 61537,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "17346:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "17314:33:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 61563,
                    "nodeType": "Block",
                    "src": "17484:498:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61546,
                                "name": "callerSpec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61344,
                                "src": "17559:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                                }
                              },
                              "id": 61547,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "17570:17:86",
                              "memberName": "refinancingLoanId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61069,
                              "src": "17559:28:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 61545,
                            "name": "_updateRepaidLoan",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62354,
                            "src": "17541:17:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 61548,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17541:47:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61549,
                        "nodeType": "ExpressionStatement",
                        "src": "17541:47:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61551,
                                "name": "callerSpec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61344,
                                "src": "17748:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                                }
                              },
                              "id": 61552,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "17759:17:86",
                              "memberName": "refinancingLoanId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61069,
                              "src": "17748:28:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 61553,
                              "name": "loanTerms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61406,
                              "src": "17805:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                "typeString": "struct PWNSimpleLoan.Terms memory"
                              }
                            },
                            {
                              "id": 61554,
                              "name": "lenderSpec",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61341,
                              "src": "17844:10:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                "typeString": "struct PWNSimpleLoan.Terms memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                              }
                            ],
                            "id": 61550,
                            "name": "_settleLoanRefinance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62138,
                            "src": "17690:20:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_struct$_Terms_$61054_memory_ptr_$_t_struct$_LenderSpec_$61067_calldata_ptr_$returns$__$",
                              "typeString": "function (uint256,struct PWNSimpleLoan.Terms memory,struct PWNSimpleLoan.LenderSpec calldata)"
                            }
                          },
                          "id": 61555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "17729:17:86",
                            "17794:9:86",
                            "17832:10:86"
                          ],
                          "names": [
                            "refinancingLoanId",
                            "loanTerms",
                            "lenderSpec"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "17690:179:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61556,
                        "nodeType": "ExpressionStatement",
                        "src": "17690:179:86"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61558,
                                "name": "callerSpec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61344,
                                "src": "17914:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.CallerSpec calldata"
                                }
                              },
                              "id": 61559,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "17925:17:86",
                              "memberName": "refinancingLoanId",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61069,
                              "src": "17914:28:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 61560,
                              "name": "loanId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61349,
                              "src": "17962:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 61557,
                            "name": "LOANRefinanced",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61152,
                            "src": "17889:14:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256)"
                            }
                          },
                          "id": 61561,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "17906:6:86",
                            "17944:16:86"
                          ],
                          "names": [
                            "loanId",
                            "refinancedLoanId"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "17889:82:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61562,
                        "nodeType": "EmitStatement",
                        "src": "17884:87:86"
                      }
                    ]
                  },
                  "id": 61564,
                  "nodeType": "IfStatement",
                  "src": "17310:672:86",
                  "trueBody": {
                    "id": 61544,
                    "nodeType": "Block",
                    "src": "17349:129:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 61540,
                              "name": "loanTerms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61406,
                              "src": "17445:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                "typeString": "struct PWNSimpleLoan.Terms memory"
                              }
                            },
                            {
                              "id": 61541,
                              "name": "lenderSpec",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61341,
                              "src": "17456:10:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                "typeString": "struct PWNSimpleLoan.Terms memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                              }
                            ],
                            "id": 61539,
                            "name": "_settleNewLoan",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61919,
                            "src": "17430:14:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Terms_$61054_memory_ptr_$_t_struct$_LenderSpec_$61067_calldata_ptr_$returns$__$",
                              "typeString": "function (struct PWNSimpleLoan.Terms memory,struct PWNSimpleLoan.LenderSpec calldata)"
                            }
                          },
                          "id": 61542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17430:37:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61543,
                        "nodeType": "ExpressionStatement",
                        "src": "17430:37:86"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 61335,
              "nodeType": "StructuredDocumentation",
              "src": "13754:481:86",
              "text": " @notice Create a new loan.\n @dev The function assumes a prior token approval to a contract address or signed permits.\n @param proposalSpec Proposal specification struct.\n @param lenderSpec Lender specification struct.\n @param callerSpec Caller specification struct.\n @param extra Auxiliary data that are emitted in the loan creation event. They are not used in the contract logic.\n @return loanId Id of the created LOAN token."
            },
            "functionSelector": "da8c3b70",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createLOAN",
            "nameLocation": "14249:10:86",
            "parameters": {
              "id": 61347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61338,
                  "mutability": "mutable",
                  "name": "proposalSpec",
                  "nameLocation": "14291:12:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61566,
                  "src": "14269:34:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ProposalSpec_$61064_calldata_ptr",
                    "typeString": "struct PWNSimpleLoan.ProposalSpec"
                  },
                  "typeName": {
                    "id": 61337,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61336,
                      "name": "ProposalSpec",
                      "nameLocations": [
                        "14269:12:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61064,
                      "src": "14269:12:86"
                    },
                    "referencedDeclaration": 61064,
                    "src": "14269:12:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ProposalSpec_$61064_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.ProposalSpec"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61341,
                  "mutability": "mutable",
                  "name": "lenderSpec",
                  "nameLocation": "14333:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61566,
                  "src": "14313:30:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                    "typeString": "struct PWNSimpleLoan.LenderSpec"
                  },
                  "typeName": {
                    "id": 61340,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61339,
                      "name": "LenderSpec",
                      "nameLocations": [
                        "14313:10:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61067,
                      "src": "14313:10:86"
                    },
                    "referencedDeclaration": 61067,
                    "src": "14313:10:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LenderSpec_$61067_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.LenderSpec"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61344,
                  "mutability": "mutable",
                  "name": "callerSpec",
                  "nameLocation": "14373:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61566,
                  "src": "14353:30:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CallerSpec_$61076_calldata_ptr",
                    "typeString": "struct PWNSimpleLoan.CallerSpec"
                  },
                  "typeName": {
                    "id": 61343,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61342,
                      "name": "CallerSpec",
                      "nameLocations": [
                        "14353:10:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61076,
                      "src": "14353:10:86"
                    },
                    "referencedDeclaration": 61076,
                    "src": "14353:10:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CallerSpec_$61076_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.CallerSpec"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61346,
                  "mutability": "mutable",
                  "name": "extra",
                  "nameLocation": "14408:5:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61566,
                  "src": "14393:20:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 61345,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "14393:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14259:160:86"
            },
            "returnParameters": {
              "id": 61350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61349,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "14446:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61566,
                  "src": "14438:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61348,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14438:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14437:16:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 61611,
            "nodeType": "FunctionDefinition",
            "src": "18218:457:86",
            "nodes": [],
            "body": {
              "id": 61610,
              "nodeType": "Block",
              "src": "18314:361:86",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 61583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 61577,
                        "name": "permit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61574,
                        "src": "18328:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                          "typeString": "struct Permit memory"
                        }
                      },
                      "id": 61578,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "18335:5:86",
                      "memberName": "asset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 66269,
                      "src": "18328:12:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 61581,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18352:1:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 61580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "18344:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 61579,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "18344:7:86",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 61582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18344:10:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "18328:26:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61609,
                  "nodeType": "IfStatement",
                  "src": "18324:345:86",
                  "trueBody": {
                    "id": 61608,
                    "nodeType": "Block",
                    "src": "18356:313:86",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 61587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 61584,
                              "name": "permit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61574,
                              "src": "18374:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                "typeString": "struct Permit memory"
                              }
                            },
                            "id": 61585,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "18381:5:86",
                            "memberName": "owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 66271,
                            "src": "18374:12:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 61586,
                            "name": "caller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61569,
                            "src": "18390:6:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "18374:22:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 61595,
                        "nodeType": "IfStatement",
                        "src": "18370:131:86",
                        "trueBody": {
                          "id": 61594,
                          "nodeType": "Block",
                          "src": "18398:103:86",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 61589,
                                      "name": "permit",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 61574,
                                      "src": "18453:6:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                        "typeString": "struct Permit memory"
                                      }
                                    },
                                    "id": 61590,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "18460:5:86",
                                    "memberName": "owner",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 66271,
                                    "src": "18453:12:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 61591,
                                    "name": "caller",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 61569,
                                    "src": "18477:6:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 61588,
                                  "name": "InvalidPermitOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 66289,
                                  "src": "18423:18:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$__$",
                                    "typeString": "function (address,address) pure"
                                  }
                                },
                                "id": 61592,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [
                                  "18444:7:86",
                                  "18467:8:86"
                                ],
                                "names": [
                                  "current",
                                  "expected"
                                ],
                                "nodeType": "FunctionCall",
                                "src": "18423:63:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 61593,
                              "nodeType": "RevertStatement",
                              "src": "18416:70:86"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 61599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 61596,
                              "name": "permit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61574,
                              "src": "18518:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                "typeString": "struct Permit memory"
                              }
                            },
                            "id": 61597,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "18525:5:86",
                            "memberName": "asset",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 66269,
                            "src": "18518:12:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 61598,
                            "name": "creditAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61571,
                            "src": "18534:13:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "18518:29:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 61607,
                        "nodeType": "IfStatement",
                        "src": "18514:145:86",
                        "trueBody": {
                          "id": 61606,
                          "nodeType": "Block",
                          "src": "18549:110:86",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 61601,
                                      "name": "permit",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 61574,
                                      "src": "18604:6:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                        "typeString": "struct Permit memory"
                                      }
                                    },
                                    "id": 61602,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "18611:5:86",
                                    "memberName": "asset",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 66269,
                                    "src": "18604:12:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 61603,
                                    "name": "creditAddress",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 61571,
                                    "src": "18628:13:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 61600,
                                  "name": "InvalidPermitAsset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 66296,
                                  "src": "18574:18:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$__$",
                                    "typeString": "function (address,address) pure"
                                  }
                                },
                                "id": 61604,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [
                                  "18595:7:86",
                                  "18618:8:86"
                                ],
                                "names": [
                                  "current",
                                  "expected"
                                ],
                                "nodeType": "FunctionCall",
                                "src": "18574:70:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 61605,
                              "nodeType": "RevertStatement",
                              "src": "18567:77:86"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 61567,
              "nodeType": "StructuredDocumentation",
              "src": "17994:219:86",
              "text": " @notice Check that permit data have correct owner and asset.\n @param caller Caller address.\n @param creditAddress Address of a credit to be used.\n @param permit Permit to be checked."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkPermit",
            "nameLocation": "18227:12:86",
            "parameters": {
              "id": 61575,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61569,
                  "mutability": "mutable",
                  "name": "caller",
                  "nameLocation": "18248:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61611,
                  "src": "18240:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61568,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18240:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61571,
                  "mutability": "mutable",
                  "name": "creditAddress",
                  "nameLocation": "18264:13:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61611,
                  "src": "18256:21:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61570,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18256:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61574,
                  "mutability": "mutable",
                  "name": "permit",
                  "nameLocation": "18293:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61611,
                  "src": "18279:20:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                    "typeString": "struct Permit"
                  },
                  "typeName": {
                    "id": 61573,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61572,
                      "name": "Permit",
                      "nameLocations": [
                        "18279:6:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 66282,
                      "src": "18279:6:86"
                    },
                    "referencedDeclaration": 66282,
                    "src": "18279:6:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Permit_$66282_storage_ptr",
                      "typeString": "struct Permit"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18239:61:86"
            },
            "returnParameters": {
              "id": 61576,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18314:0:86"
            },
            "scope": 63281,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 61693,
            "nodeType": "FunctionDefinition",
            "src": "18943:1230:86",
            "nodes": [],
            "body": {
              "id": 61692,
              "nodeType": "Block",
              "src": "19030:1143:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    61622
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61622,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "19053:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 61692,
                      "src": "19040:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 61621,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 61620,
                          "name": "LOAN",
                          "nameLocations": [
                            "19040:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "19040:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "19040:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61626,
                  "initialValue": {
                    "baseExpression": {
                      "id": 61623,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "19060:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 61625,
                    "indexExpression": {
                      "id": 61624,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61614,
                      "src": "19066:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19060:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19040:33:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 61638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 61632,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 61627,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61622,
                          "src": "19323:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        },
                        "id": 61628,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19328:13:86",
                        "memberName": "creditAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61080,
                        "src": "19323:18:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "expression": {
                          "expression": {
                            "id": 61629,
                            "name": "loanTerms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61617,
                            "src": "19345:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                              "typeString": "struct PWNSimpleLoan.Terms memory"
                            }
                          },
                          "id": 61630,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "19355:6:86",
                          "memberName": "credit",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61045,
                          "src": "19345:16:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                            "typeString": "struct MultiToken.Asset memory"
                          }
                        },
                        "id": 61631,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19362:12:86",
                        "memberName": "assetAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 55,
                        "src": "19345:29:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "19323:51:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 61637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "expression": {
                            "id": 61633,
                            "name": "loanTerms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61617,
                            "src": "19390:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                              "typeString": "struct PWNSimpleLoan.Terms memory"
                            }
                          },
                          "id": 61634,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "19400:6:86",
                          "memberName": "credit",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61045,
                          "src": "19390:16:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                            "typeString": "struct MultiToken.Asset memory"
                          }
                        },
                        "id": 61635,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19407:6:86",
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 59,
                        "src": "19390:23:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 61636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19417:1:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "19390:28:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19323:95:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61642,
                  "nodeType": "IfStatement",
                  "src": "19306:155:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 61639,
                        "name": "RefinanceCreditMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61213,
                        "src": "19436:23:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 61640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19436:25:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 61641,
                    "nodeType": "RevertStatement",
                    "src": "19429:32:86"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 61673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 61665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 61657,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_enum$_Category_$50",
                            "typeString": "enum MultiToken.Category"
                          },
                          "id": 61649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 61643,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61622,
                                "src": "19559:4:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                  "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                }
                              },
                              "id": 61644,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "19564:10:86",
                              "memberName": "collateral",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61099,
                              "src": "19559:15:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_storage",
                                "typeString": "struct MultiToken.Asset storage ref"
                              }
                            },
                            "id": 61645,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "19575:8:86",
                            "memberName": "category",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 53,
                            "src": "19559:24:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Category_$50",
                              "typeString": "enum MultiToken.Category"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "expression": {
                                "id": 61646,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61617,
                                "src": "19587:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 61647,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "19597:10:86",
                              "memberName": "collateral",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61042,
                              "src": "19587:20:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            "id": 61648,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "19608:8:86",
                            "memberName": "category",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 53,
                            "src": "19587:29:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Category_$50",
                              "typeString": "enum MultiToken.Category"
                            }
                          },
                          "src": "19559:57:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 61656,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 61650,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61622,
                                "src": "19632:4:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                  "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                }
                              },
                              "id": 61651,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "19637:10:86",
                              "memberName": "collateral",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61099,
                              "src": "19632:15:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_storage",
                                "typeString": "struct MultiToken.Asset storage ref"
                              }
                            },
                            "id": 61652,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "19648:12:86",
                            "memberName": "assetAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 55,
                            "src": "19632:28:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "expression": {
                                "id": 61653,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61617,
                                "src": "19664:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 61654,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "19674:10:86",
                              "memberName": "collateral",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61042,
                              "src": "19664:20:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            "id": 61655,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "19685:12:86",
                            "memberName": "assetAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 55,
                            "src": "19664:33:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "19632:65:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "19559:138:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 61664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "expression": {
                              "id": 61658,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61622,
                              "src": "19713:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                              }
                            },
                            "id": 61659,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "19718:10:86",
                            "memberName": "collateral",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61099,
                            "src": "19713:15:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Asset_$60_storage",
                              "typeString": "struct MultiToken.Asset storage ref"
                            }
                          },
                          "id": 61660,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "19729:2:86",
                          "memberName": "id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 57,
                          "src": "19713:18:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "expression": {
                            "expression": {
                              "id": 61661,
                              "name": "loanTerms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61617,
                              "src": "19735:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                "typeString": "struct PWNSimpleLoan.Terms memory"
                              }
                            },
                            "id": 61662,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "19745:10:86",
                            "memberName": "collateral",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61042,
                            "src": "19735:20:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                              "typeString": "struct MultiToken.Asset memory"
                            }
                          },
                          "id": 61663,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "19756:2:86",
                          "memberName": "id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 57,
                          "src": "19735:23:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "19713:45:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "19559:199:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 61672,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "expression": {
                            "id": 61666,
                            "name": "loan",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61622,
                            "src": "19774:4:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                              "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                            }
                          },
                          "id": 61667,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "19779:10:86",
                          "memberName": "collateral",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61099,
                          "src": "19774:15:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Asset_$60_storage",
                            "typeString": "struct MultiToken.Asset storage ref"
                          }
                        },
                        "id": 61668,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19790:6:86",
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 59,
                        "src": "19774:22:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "expression": {
                          "expression": {
                            "id": 61669,
                            "name": "loanTerms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61617,
                            "src": "19800:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                              "typeString": "struct PWNSimpleLoan.Terms memory"
                            }
                          },
                          "id": 61670,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "19810:10:86",
                          "memberName": "collateral",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61042,
                          "src": "19800:20:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                            "typeString": "struct MultiToken.Asset memory"
                          }
                        },
                        "id": 61671,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19821:6:86",
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 59,
                        "src": "19800:27:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "19774:53:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19559:268:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61677,
                  "nodeType": "IfStatement",
                  "src": "19542:332:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 61674,
                        "name": "RefinanceCollateralMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61216,
                        "src": "19845:27:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 61675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "19845:29:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 61676,
                    "nodeType": "RevertStatement",
                    "src": "19838:36:86"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 61682,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 61678,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61622,
                        "src": "19960:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61679,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "19965:8:86",
                      "memberName": "borrower",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61088,
                      "src": "19960:13:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 61680,
                        "name": "loanTerms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61617,
                        "src": "19977:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms memory"
                        }
                      },
                      "id": 61681,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "19987:8:86",
                      "memberName": "borrower",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61037,
                      "src": "19977:18:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "19960:35:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61691,
                  "nodeType": "IfStatement",
                  "src": "19956:211:86",
                  "trueBody": {
                    "id": 61690,
                    "nodeType": "Block",
                    "src": "19997:170:86",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61684,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61622,
                                "src": "20079:4:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                  "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                }
                              },
                              "id": 61685,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "20084:8:86",
                              "memberName": "borrower",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61088,
                              "src": "20079:13:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 61686,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61617,
                                "src": "20123:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 61687,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "20133:8:86",
                              "memberName": "borrower",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61037,
                              "src": "20123:18:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 61683,
                            "name": "RefinanceBorrowerMismatch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61210,
                            "src": "20018:25:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address) pure"
                            }
                          },
                          "id": 61688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "20062:15:86",
                            "20110:11:86"
                          ],
                          "names": [
                            "currentBorrower",
                            "newBorrower"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "20018:138:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61689,
                        "nodeType": "RevertStatement",
                        "src": "20011:145:86"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 61612,
              "nodeType": "StructuredDocumentation",
              "src": "18681:257:86",
              "text": " @notice Check if the loan terms are valid for refinancing.\n @dev The function will revert if the loan terms are not valid for refinancing.\n @param loanId Original loan id.\n @param loanTerms Refinancing loan terms struct."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkRefinanceLoanTerms",
            "nameLocation": "18952:24:86",
            "parameters": {
              "id": 61618,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61614,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "18985:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61693,
                  "src": "18977:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61613,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18977:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61617,
                  "mutability": "mutable",
                  "name": "loanTerms",
                  "nameLocation": "19006:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61693,
                  "src": "18993:22:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                    "typeString": "struct PWNSimpleLoan.Terms"
                  },
                  "typeName": {
                    "id": 61616,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61615,
                      "name": "Terms",
                      "nameLocations": [
                        "18993:5:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61054,
                      "src": "18993:5:86"
                    },
                    "referencedDeclaration": 61054,
                    "src": "18993:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Terms_$61054_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.Terms"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18976:40:86"
            },
            "returnParameters": {
              "id": 61619,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19030:0:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 61831,
            "nodeType": "FunctionDefinition",
            "src": "20590:1391:86",
            "nodes": [],
            "body": {
              "id": 61830,
              "nodeType": "Block",
              "src": "20816:1165:86",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 61717,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 61711,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61709,
                      "src": "20864:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 61714,
                            "name": "loanTerms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61701,
                            "src": "20888:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                              "typeString": "struct PWNSimpleLoan.Terms memory"
                            }
                          },
                          "id": 61715,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "20898:6:86",
                          "memberName": "lender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61035,
                          "src": "20888:16:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 61712,
                          "name": "loanToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61024,
                          "src": "20873:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_PWNLOAN_$65743",
                            "typeString": "contract PWNLOAN"
                          }
                        },
                        "id": 61713,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "20883:4:86",
                        "memberName": "mint",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 65633,
                        "src": "20873:14:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) external returns (uint256)"
                        }
                      },
                      "id": 61716,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20873:32:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20864:41:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 61718,
                  "nodeType": "ExpressionStatement",
                  "src": "20864:41:86"
                },
                {
                  "assignments": [
                    61721
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61721,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "20970:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 61830,
                      "src": "20957:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 61720,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 61719,
                          "name": "LOAN",
                          "nameLocations": [
                            "20957:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "20957:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "20957:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61725,
                  "initialValue": {
                    "baseExpression": {
                      "id": 61722,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "20977:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 61724,
                    "indexExpression": {
                      "id": 61723,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61709,
                      "src": "20983:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "20977:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20957:33:86"
                },
                {
                  "expression": {
                    "id": 61730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61726,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61721,
                        "src": "21000:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61728,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21005:6:86",
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61078,
                      "src": "21000:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "32",
                      "id": 61729,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "21014:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "21000:15:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 61731,
                  "nodeType": "ExpressionStatement",
                  "src": "21000:15:86"
                },
                {
                  "expression": {
                    "id": 61738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61732,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61721,
                        "src": "21025:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61734,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21030:13:86",
                      "memberName": "creditAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61080,
                      "src": "21025:18:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "expression": {
                          "id": 61735,
                          "name": "loanTerms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61701,
                          "src": "21046:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          }
                        },
                        "id": 61736,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "21056:6:86",
                        "memberName": "credit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61045,
                        "src": "21046:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        }
                      },
                      "id": 61737,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21063:12:86",
                      "memberName": "assetAddress",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 55,
                      "src": "21046:29:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "21025:50:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 61739,
                  "nodeType": "ExpressionStatement",
                  "src": "21025:50:86"
                },
                {
                  "expression": {
                    "id": 61745,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61740,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61721,
                        "src": "21085:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61742,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21090:21:86",
                      "memberName": "originalSourceOfFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61082,
                      "src": "21085:26:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 61743,
                        "name": "lenderSpec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61704,
                        "src": "21114:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                        }
                      },
                      "id": 61744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21125:13:86",
                      "memberName": "sourceOfFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61066,
                      "src": "21114:24:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "21085:53:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 61746,
                  "nodeType": "ExpressionStatement",
                  "src": "21085:53:86"
                },
                {
                  "expression": {
                    "id": 61755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61747,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61721,
                        "src": "21148:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61749,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21153:14:86",
                      "memberName": "startTimestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61084,
                      "src": "21148:19:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 61752,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "21177:5:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 61753,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "21183:9:86",
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "21177:15:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 61751,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "21170:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint40_$",
                          "typeString": "type(uint40)"
                        },
                        "typeName": {
                          "id": 61750,
                          "name": "uint40",
                          "nodeType": "ElementaryTypeName",
                          "src": "21170:6:86",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 61754,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21170:23:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "21148:45:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "id": 61756,
                  "nodeType": "ExpressionStatement",
                  "src": "21148:45:86"
                },
                {
                  "expression": {
                    "id": 61768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61757,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61721,
                        "src": "21203:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61759,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21208:16:86",
                      "memberName": "defaultTimestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61086,
                      "src": "21203:21:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      },
                      "id": 61767,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 61762,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "21234:5:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 61763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "21240:9:86",
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "21234:15:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 61761,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21227:6:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 61760,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "21227:6:86",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 61764,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21227:23:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 61765,
                          "name": "loanTerms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61701,
                          "src": "21253:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          }
                        },
                        "id": 61766,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "21263:8:86",
                        "memberName": "duration",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61039,
                        "src": "21253:18:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "src": "21227:44:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "21203:68:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "id": 61769,
                  "nodeType": "ExpressionStatement",
                  "src": "21203:68:86"
                },
                {
                  "expression": {
                    "id": 61775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61770,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61721,
                        "src": "21281:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61772,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21286:8:86",
                      "memberName": "borrower",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61088,
                      "src": "21281:13:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 61773,
                        "name": "loanTerms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61701,
                        "src": "21297:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms memory"
                        }
                      },
                      "id": 61774,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21307:8:86",
                      "memberName": "borrower",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61037,
                      "src": "21297:18:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "21281:34:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 61776,
                  "nodeType": "ExpressionStatement",
                  "src": "21281:34:86"
                },
                {
                  "expression": {
                    "id": 61782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61777,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61721,
                        "src": "21325:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61779,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21330:14:86",
                      "memberName": "originalLender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61090,
                      "src": "21325:19:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 61780,
                        "name": "loanTerms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61701,
                        "src": "21347:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms memory"
                        }
                      },
                      "id": 61781,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21357:6:86",
                      "memberName": "lender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61035,
                      "src": "21347:16:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "21325:38:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 61783,
                  "nodeType": "ExpressionStatement",
                  "src": "21325:38:86"
                },
                {
                  "expression": {
                    "id": 61797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61784,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61721,
                        "src": "21373:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61786,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21378:25:86",
                      "memberName": "accruingInterestDailyRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61092,
                      "src": "21373:30:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61791,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61701,
                                "src": "21449:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 61792,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "21459:19:86",
                              "memberName": "accruingInterestAPR",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61049,
                              "src": "21449:29:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            },
                            {
                              "id": 61793,
                              "name": "APR_TO_DAILY_INTEREST_NUMERATOR",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 60979,
                              "src": "21480:31:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 61794,
                              "name": "APR_TO_DAILY_INTEREST_DENOMINATOR",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 60982,
                              "src": "21513:33:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 61789,
                              "name": "Math",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 55080,
                              "src": "21424:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Math_$55080_$",
                                "typeString": "type(library Math)"
                              }
                            },
                            "id": 61790,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "21429:6:86",
                            "memberName": "mulDiv",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 54428,
                            "src": "21424:11:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 61795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21424:132:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 61787,
                          "name": "SafeCast",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 56621,
                          "src": "21406:8:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_SafeCast_$56621_$",
                            "typeString": "type(library SafeCast)"
                          }
                        },
                        "id": 61788,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "21415:8:86",
                        "memberName": "toUint40",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 55758,
                        "src": "21406:17:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint40_$",
                          "typeString": "function (uint256) pure returns (uint40)"
                        }
                      },
                      "id": 61796,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21406:151:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "21373:184:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "id": 61798,
                  "nodeType": "ExpressionStatement",
                  "src": "21373:184:86"
                },
                {
                  "expression": {
                    "id": 61804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61799,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61721,
                        "src": "21567:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61801,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21572:19:86",
                      "memberName": "fixedInterestAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61094,
                      "src": "21567:24:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 61802,
                        "name": "loanTerms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61701,
                        "src": "21594:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms memory"
                        }
                      },
                      "id": 61803,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21604:19:86",
                      "memberName": "fixedInterestAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61047,
                      "src": "21594:29:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21567:56:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 61805,
                  "nodeType": "ExpressionStatement",
                  "src": "21567:56:86"
                },
                {
                  "expression": {
                    "id": 61812,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61806,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61721,
                        "src": "21633:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61808,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21638:15:86",
                      "memberName": "principalAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61096,
                      "src": "21633:20:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "expression": {
                          "id": 61809,
                          "name": "loanTerms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61701,
                          "src": "21656:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          }
                        },
                        "id": 61810,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "21666:6:86",
                        "memberName": "credit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61045,
                        "src": "21656:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        }
                      },
                      "id": 61811,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21673:6:86",
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 59,
                      "src": "21656:23:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21633:46:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 61813,
                  "nodeType": "ExpressionStatement",
                  "src": "21633:46:86"
                },
                {
                  "expression": {
                    "id": 61819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61814,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61721,
                        "src": "21689:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 61816,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "21694:10:86",
                      "memberName": "collateral",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61099,
                      "src": "21689:15:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_storage",
                        "typeString": "struct MultiToken.Asset storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 61817,
                        "name": "loanTerms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61701,
                        "src": "21707:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms memory"
                        }
                      },
                      "id": 61818,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "21717:10:86",
                      "memberName": "collateral",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61042,
                      "src": "21707:20:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                        "typeString": "struct MultiToken.Asset memory"
                      }
                    },
                    "src": "21689:38:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_storage",
                      "typeString": "struct MultiToken.Asset storage ref"
                    }
                  },
                  "id": 61820,
                  "nodeType": "ExpressionStatement",
                  "src": "21689:38:86"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 61822,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61709,
                        "src": "21777:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 61823,
                        "name": "proposalHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61696,
                        "src": "21811:12:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 61824,
                        "name": "proposalContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61698,
                        "src": "21855:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 61825,
                        "name": "loanTerms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61701,
                        "src": "21892:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms memory"
                        }
                      },
                      {
                        "id": 61826,
                        "name": "lenderSpec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61704,
                        "src": "21927:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                        }
                      },
                      {
                        "id": 61827,
                        "name": "extra",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61706,
                        "src": "21958:5:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 61821,
                      "name": "LOANCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61145,
                      "src": "21743:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bytes32_$_t_address_$_t_struct$_Terms_$61054_memory_ptr_$_t_struct$_LenderSpec_$61067_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint256,bytes32,address,struct PWNSimpleLoan.Terms memory,struct PWNSimpleLoan.LenderSpec memory,bytes memory)"
                      }
                    },
                    "id": 61828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "21769:6:86",
                      "21797:12:86",
                      "21837:16:86",
                      "21885:5:86",
                      "21915:10:86",
                      "21951:5:86"
                    ],
                    "names": [
                      "loanId",
                      "proposalHash",
                      "proposalContract",
                      "terms",
                      "lenderSpec",
                      "extra"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "21743:231:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 61829,
                  "nodeType": "EmitStatement",
                  "src": "21738:236:86"
                }
              ]
            },
            "documentation": {
              "id": 61694,
              "nodeType": "StructuredDocumentation",
              "src": "20179:406:86",
              "text": " @notice Mint LOAN token and store loan data under loan id.\n @param proposalHash Hash of a loan offer / request that is signed by a lender / borrower.\n @param proposalContract Address of a loan proposal contract.\n @param loanTerms Loan terms struct.\n @param extra Auxiliary data that are emitted in the loan creation event. They are not used in the contract logic."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_createLoan",
            "nameLocation": "20599:11:86",
            "parameters": {
              "id": 61707,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61696,
                  "mutability": "mutable",
                  "name": "proposalHash",
                  "nameLocation": "20628:12:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61831,
                  "src": "20620:20:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 61695,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "20620:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61698,
                  "mutability": "mutable",
                  "name": "proposalContract",
                  "nameLocation": "20658:16:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61831,
                  "src": "20650:24:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 61697,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20650:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61701,
                  "mutability": "mutable",
                  "name": "loanTerms",
                  "nameLocation": "20697:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61831,
                  "src": "20684:22:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                    "typeString": "struct PWNSimpleLoan.Terms"
                  },
                  "typeName": {
                    "id": 61700,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61699,
                      "name": "Terms",
                      "nameLocations": [
                        "20684:5:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61054,
                      "src": "20684:5:86"
                    },
                    "referencedDeclaration": 61054,
                    "src": "20684:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Terms_$61054_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.Terms"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61704,
                  "mutability": "mutable",
                  "name": "lenderSpec",
                  "nameLocation": "20736:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61831,
                  "src": "20716:30:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                    "typeString": "struct PWNSimpleLoan.LenderSpec"
                  },
                  "typeName": {
                    "id": 61703,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61702,
                      "name": "LenderSpec",
                      "nameLocations": [
                        "20716:10:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61067,
                      "src": "20716:10:86"
                    },
                    "referencedDeclaration": 61067,
                    "src": "20716:10:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LenderSpec_$61067_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.LenderSpec"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61706,
                  "mutability": "mutable",
                  "name": "extra",
                  "nameLocation": "20771:5:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61831,
                  "src": "20756:20:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 61705,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "20756:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20610:172:86"
            },
            "returnParameters": {
              "id": 61710,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61709,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "20808:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61831,
                  "src": "20800:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61708,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20800:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20799:16:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 61919,
            "nodeType": "FunctionDefinition",
            "src": "22211:1145:86",
            "nodes": [],
            "body": {
              "id": 61918,
              "nodeType": "Block",
              "src": "22321:1035:86",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 61842,
                          "name": "loanTerms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61835,
                          "src": "22377:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          }
                        },
                        "id": 61843,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22387:10:86",
                        "memberName": "collateral",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61042,
                        "src": "22377:20:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 61844,
                          "name": "loanTerms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61835,
                          "src": "22399:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          }
                        },
                        "id": 61845,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22409:8:86",
                        "memberName": "borrower",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61037,
                        "src": "22399:18:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 61841,
                      "name": "_pull",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65868,
                      "src": "22371:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (struct MultiToken.Asset memory,address)"
                      }
                    },
                    "id": 61846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22371:47:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 61847,
                  "nodeType": "ExpressionStatement",
                  "src": "22371:47:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 61852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 61848,
                        "name": "lenderSpec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61838,
                        "src": "22478:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                        }
                      },
                      "id": 61849,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22489:13:86",
                      "memberName": "sourceOfFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61066,
                      "src": "22478:24:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 61850,
                        "name": "loanTerms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61835,
                        "src": "22506:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms memory"
                        }
                      },
                      "id": 61851,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22516:6:86",
                      "memberName": "lender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61035,
                      "src": "22506:16:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "22478:44:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61861,
                  "nodeType": "IfStatement",
                  "src": "22474:196:86",
                  "trueBody": {
                    "id": 61860,
                    "nodeType": "Block",
                    "src": "22524:146:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 61854,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61835,
                                "src": "22619:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 61855,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "22629:6:86",
                              "memberName": "credit",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61045,
                              "src": "22619:16:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            {
                              "id": 61856,
                              "name": "loanTerms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61835,
                              "src": "22637:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                "typeString": "struct PWNSimpleLoan.Terms memory"
                              }
                            },
                            {
                              "id": 61857,
                              "name": "lenderSpec",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61838,
                              "src": "22648:10:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                "typeString": "struct PWNSimpleLoan.Terms memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                              }
                            ],
                            "id": 61853,
                            "name": "_withdrawCreditFromPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62192,
                            "src": "22595:23:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_struct$_Terms_$61054_memory_ptr_$_t_struct$_LenderSpec_$61067_calldata_ptr_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory,struct PWNSimpleLoan.Terms memory,struct PWNSimpleLoan.LenderSpec calldata)"
                            }
                          },
                          "id": 61858,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22595:64:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61859,
                        "nodeType": "ExpressionStatement",
                        "src": "22595:64:86"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    61863,
                    61865
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61863,
                      "mutability": "mutable",
                      "name": "feeAmount",
                      "nameLocation": "22741:9:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 61918,
                      "src": "22733:17:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 61862,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22733:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 61865,
                      "mutability": "mutable",
                      "name": "newLoanAmount",
                      "nameLocation": "22760:13:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 61918,
                      "src": "22752:21:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 61864,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22752:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61875,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 61868,
                            "name": "config",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61027,
                            "src": "22825:6:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PWNConfig_$60390",
                              "typeString": "contract PWNConfig"
                            }
                          },
                          "id": 61869,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "22832:3:86",
                          "memberName": "fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 60008,
                          "src": "22825:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint16_$",
                            "typeString": "function () view external returns (uint16)"
                          }
                        },
                        "id": 61870,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "22825:12:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 61871,
                            "name": "loanTerms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61835,
                            "src": "22839:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                              "typeString": "struct PWNSimpleLoan.Terms memory"
                            }
                          },
                          "id": 61872,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "22849:6:86",
                          "memberName": "credit",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61045,
                          "src": "22839:16:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                            "typeString": "struct MultiToken.Asset memory"
                          }
                        },
                        "id": 61873,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "22856:6:86",
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 59,
                        "src": "22839:23:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 61866,
                        "name": "PWNFeeCalculator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60763,
                        "src": "22789:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PWNFeeCalculator_$60763_$",
                          "typeString": "type(library PWNFeeCalculator)"
                        }
                      },
                      "id": 61867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22806:18:86",
                      "memberName": "calculateFeeAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60762,
                      "src": "22789:35:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint16_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint16,uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 61874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22789:74:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22732:131:86"
                },
                {
                  "assignments": [
                    61880
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61880,
                      "mutability": "mutable",
                      "name": "creditHelper",
                      "nameLocation": "22975:12:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 61918,
                      "src": "22951:36:86",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                        "typeString": "struct MultiToken.Asset"
                      },
                      "typeName": {
                        "id": 61879,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 61878,
                          "name": "MultiToken.Asset",
                          "nameLocations": [
                            "22951:10:86",
                            "22962:5:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 60,
                          "src": "22951:16:86"
                        },
                        "referencedDeclaration": 60,
                        "src": "22951:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                          "typeString": "struct MultiToken.Asset"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61883,
                  "initialValue": {
                    "expression": {
                      "id": 61881,
                      "name": "loanTerms",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61835,
                      "src": "22990:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                        "typeString": "struct PWNSimpleLoan.Terms memory"
                      }
                    },
                    "id": 61882,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "23000:6:86",
                    "memberName": "credit",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 61045,
                    "src": "22990:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                      "typeString": "struct MultiToken.Asset memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22951:55:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 61886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 61884,
                      "name": "feeAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61863,
                      "src": "23045:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 61885,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23057:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "23045:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 61903,
                  "nodeType": "IfStatement",
                  "src": "23041:153:86",
                  "trueBody": {
                    "id": 61902,
                    "nodeType": "Block",
                    "src": "23060:134:86",
                    "statements": [
                      {
                        "expression": {
                          "id": 61891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 61887,
                              "name": "creditHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61880,
                              "src": "23074:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            "id": 61889,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "23087:6:86",
                            "memberName": "amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59,
                            "src": "23074:19:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 61890,
                            "name": "feeAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61863,
                            "src": "23096:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23074:31:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 61892,
                        "nodeType": "ExpressionStatement",
                        "src": "23074:31:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 61894,
                              "name": "creditHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61880,
                              "src": "23129:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 61895,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61835,
                                "src": "23143:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 61896,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "23153:6:86",
                              "memberName": "lender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61035,
                              "src": "23143:16:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 61897,
                                  "name": "config",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 61027,
                                  "src": "23161:6:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PWNConfig_$60390",
                                    "typeString": "contract PWNConfig"
                                  }
                                },
                                "id": 61898,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "23168:12:86",
                                "memberName": "feeCollector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 60011,
                                "src": "23161:19:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 61899,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23161:21:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 61893,
                            "name": "_pushFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 65946,
                            "src": "23119:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory,address,address)"
                            }
                          },
                          "id": 61900,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23119:64:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 61901,
                        "nodeType": "ExpressionStatement",
                        "src": "23119:64:86"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 61908,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 61904,
                        "name": "creditHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61880,
                        "src": "23243:12:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        }
                      },
                      "id": 61906,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "23256:6:86",
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 59,
                      "src": "23243:19:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 61907,
                      "name": "newLoanAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61865,
                      "src": "23265:13:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23243:35:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 61909,
                  "nodeType": "ExpressionStatement",
                  "src": "23243:35:86"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 61911,
                        "name": "creditHelper",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61880,
                        "src": "23298:12:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 61912,
                          "name": "loanTerms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61835,
                          "src": "23312:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          }
                        },
                        "id": 61913,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "23322:6:86",
                        "memberName": "lender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61035,
                        "src": "23312:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 61914,
                          "name": "loanTerms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61835,
                          "src": "23330:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          }
                        },
                        "id": 61915,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "23340:8:86",
                        "memberName": "borrower",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61037,
                        "src": "23330:18:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 61910,
                      "name": "_pushFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65946,
                      "src": "23288:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (struct MultiToken.Asset memory,address,address)"
                      }
                    },
                    "id": 61916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23288:61:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 61917,
                  "nodeType": "ExpressionStatement",
                  "src": "23288:61:86"
                }
              ]
            },
            "documentation": {
              "id": 61832,
              "nodeType": "StructuredDocumentation",
              "src": "21987:219:86",
              "text": " @notice Transfer collateral to Vault and credit to borrower.\n @dev The function assumes a prior token approval to a contract address or signed permits.\n @param loanTerms Loan terms struct."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_settleNewLoan",
            "nameLocation": "22220:14:86",
            "parameters": {
              "id": 61839,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61835,
                  "mutability": "mutable",
                  "name": "loanTerms",
                  "nameLocation": "22257:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61919,
                  "src": "22244:22:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                    "typeString": "struct PWNSimpleLoan.Terms"
                  },
                  "typeName": {
                    "id": 61834,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61833,
                      "name": "Terms",
                      "nameLocations": [
                        "22244:5:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61054,
                      "src": "22244:5:86"
                    },
                    "referencedDeclaration": 61054,
                    "src": "22244:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Terms_$61054_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.Terms"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61838,
                  "mutability": "mutable",
                  "name": "lenderSpec",
                  "nameLocation": "22296:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 61919,
                  "src": "22276:30:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                    "typeString": "struct PWNSimpleLoan.LenderSpec"
                  },
                  "typeName": {
                    "id": 61837,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61836,
                      "name": "LenderSpec",
                      "nameLocations": [
                        "22276:10:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61067,
                      "src": "22276:10:86"
                    },
                    "referencedDeclaration": 61067,
                    "src": "22276:10:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LenderSpec_$61067_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.LenderSpec"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22234:78:86"
            },
            "returnParameters": {
              "id": 61840,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22321:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 62138,
            "nodeType": "FunctionDefinition",
            "src": "23936:3203:86",
            "nodes": [],
            "body": {
              "id": 62137,
              "nodeType": "Block",
              "src": "24087:3052:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    61933
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61933,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "24110:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62137,
                      "src": "24097:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 61932,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 61931,
                          "name": "LOAN",
                          "nameLocations": [
                            "24097:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "24097:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "24097:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61937,
                  "initialValue": {
                    "baseExpression": {
                      "id": 61934,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "24117:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 61936,
                    "indexExpression": {
                      "id": 61935,
                      "name": "refinancingLoanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61922,
                      "src": "24123:17:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "24117:24:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24097:44:86"
                },
                {
                  "assignments": [
                    61939
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61939,
                      "mutability": "mutable",
                      "name": "loanOwner",
                      "nameLocation": "24159:9:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62137,
                      "src": "24151:17:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 61938,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "24151:7:86",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61944,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 61942,
                        "name": "refinancingLoanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61922,
                        "src": "24189:17:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 61940,
                        "name": "loanToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61024,
                        "src": "24171:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PWNLOAN_$65743",
                          "typeString": "contract PWNLOAN"
                        }
                      },
                      "id": 61941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "24181:7:86",
                      "memberName": "ownerOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 51449,
                      "src": "24171:17:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view external returns (address)"
                      }
                    },
                    "id": 61943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24171:36:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24151:56:86"
                },
                {
                  "assignments": [
                    61946
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61946,
                      "mutability": "mutable",
                      "name": "repaymentAmount",
                      "nameLocation": "24225:15:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62137,
                      "src": "24217:23:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 61945,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24217:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61950,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 61948,
                        "name": "refinancingLoanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61922,
                        "src": "24264:17:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 61947,
                      "name": "_loanRepaymentAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62404,
                      "src": "24243:20:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 61949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24243:39:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24217:65:86"
                },
                {
                  "assignments": [
                    61952,
                    61954
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61952,
                      "mutability": "mutable",
                      "name": "feeAmount",
                      "nameLocation": "24354:9:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62137,
                      "src": "24346:17:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 61951,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24346:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 61954,
                      "mutability": "mutable",
                      "name": "newLoanAmount",
                      "nameLocation": "24373:13:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62137,
                      "src": "24365:21:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 61953,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24365:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61964,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 61957,
                            "name": "config",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61027,
                            "src": "24438:6:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PWNConfig_$60390",
                              "typeString": "contract PWNConfig"
                            }
                          },
                          "id": 61958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24445:3:86",
                          "memberName": "fee",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 60008,
                          "src": "24438:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_uint16_$",
                            "typeString": "function () view external returns (uint16)"
                          }
                        },
                        "id": 61959,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24438:12:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 61960,
                            "name": "loanTerms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61925,
                            "src": "24452:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                              "typeString": "struct PWNSimpleLoan.Terms memory"
                            }
                          },
                          "id": 61961,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24462:6:86",
                          "memberName": "credit",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61045,
                          "src": "24452:16:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                            "typeString": "struct MultiToken.Asset memory"
                          }
                        },
                        "id": 61962,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "24469:6:86",
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 59,
                        "src": "24452:23:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 61955,
                        "name": "PWNFeeCalculator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60763,
                        "src": "24402:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_PWNFeeCalculator_$60763_$",
                          "typeString": "type(library PWNFeeCalculator)"
                        }
                      },
                      "id": 61956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "24419:18:86",
                      "memberName": "calculateFeeAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60762,
                      "src": "24402:35:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint16_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint16,uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 61963,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24402:74:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24345:131:86"
                },
                {
                  "assignments": [
                    61966
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61966,
                      "mutability": "mutable",
                      "name": "common",
                      "nameLocation": "24495:6:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62137,
                      "src": "24487:14:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 61965,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24487:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61972,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 61969,
                        "name": "repaymentAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61946,
                        "src": "24513:15:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 61970,
                        "name": "newLoanAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61954,
                        "src": "24530:13:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 61967,
                        "name": "Math",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55080,
                        "src": "24504:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Math_$55080_$",
                          "typeString": "type(library Math)"
                        }
                      },
                      "id": 61968,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "24509:3:86",
                      "memberName": "min",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 54257,
                      "src": "24504:8:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 61971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24504:40:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24487:57:86"
                },
                {
                  "assignments": [
                    61974
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61974,
                      "mutability": "mutable",
                      "name": "surplus",
                      "nameLocation": "24562:7:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62137,
                      "src": "24554:15:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 61973,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24554:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61983,
                  "initialValue": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 61977,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 61975,
                        "name": "newLoanAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61954,
                        "src": "24572:13:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "id": 61976,
                        "name": "repaymentAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61946,
                        "src": "24588:15:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "24572:31:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "hexValue": "30",
                      "id": 61981,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24640:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "id": 61982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "24572:69:86",
                    "trueExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 61980,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 61978,
                        "name": "newLoanAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61954,
                        "src": "24606:13:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "id": 61979,
                        "name": "repaymentAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61946,
                        "src": "24622:15:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "24606:31:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24554:87:86"
                },
                {
                  "assignments": [
                    61985
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61985,
                      "mutability": "mutable",
                      "name": "shortage",
                      "nameLocation": "24659:8:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62137,
                      "src": "24651:16:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 61984,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24651:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 61994,
                  "initialValue": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 61988,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 61986,
                        "name": "surplus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61974,
                        "src": "24670:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 61987,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24680:1:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "24670:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 61992,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 61990,
                        "name": "repaymentAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61946,
                        "src": "24688:15:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "id": 61991,
                        "name": "newLoanAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61954,
                        "src": "24706:13:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "24688:31:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 61993,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "24670:49:86",
                    "trueExpression": {
                      "hexValue": "30",
                      "id": 61989,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24684:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24651:68:86"
                },
                {
                  "assignments": [
                    61996
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 61996,
                      "mutability": "mutable",
                      "name": "shouldTransferCommon",
                      "nameLocation": "25043:20:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62137,
                      "src": "25038:25:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 61995,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "25038:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62013,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 62012,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 62000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 61997,
                          "name": "loanTerms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61925,
                          "src": "25078:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                            "typeString": "struct PWNSimpleLoan.Terms memory"
                          }
                        },
                        "id": 61998,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "25088:6:86",
                        "memberName": "lender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61035,
                        "src": "25078:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "id": 61999,
                        "name": "loanOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61939,
                        "src": "25098:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "25078:29:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 62010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 62004,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 62001,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61933,
                                "src": "25124:4:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                  "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                }
                              },
                              "id": 62002,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "25129:14:86",
                              "memberName": "originalLender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61090,
                              "src": "25124:19:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 62003,
                              "name": "loanOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61939,
                              "src": "25147:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "25124:32:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 62009,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 62005,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61933,
                                "src": "25160:4:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                  "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                }
                              },
                              "id": 62006,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "25165:21:86",
                              "memberName": "originalSourceOfFunds",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61082,
                              "src": "25160:26:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "expression": {
                                "id": 62007,
                                "name": "lenderSpec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61928,
                                "src": "25190:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                                }
                              },
                              "id": 62008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "25201:13:86",
                              "memberName": "sourceOfFunds",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61066,
                              "src": "25190:24:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "25160:54:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "25124:90:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 62011,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "25123:92:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "25078:137:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25038:177:86"
                },
                {
                  "assignments": [
                    62018
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62018,
                      "mutability": "mutable",
                      "name": "creditHelper",
                      "nameLocation": "25327:12:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62137,
                      "src": "25303:36:86",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                        "typeString": "struct MultiToken.Asset"
                      },
                      "typeName": {
                        "id": 62017,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62016,
                          "name": "MultiToken.Asset",
                          "nameLocations": [
                            "25303:10:86",
                            "25314:5:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 60,
                          "src": "25303:16:86"
                        },
                        "referencedDeclaration": 60,
                        "src": "25303:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                          "typeString": "struct MultiToken.Asset"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62021,
                  "initialValue": {
                    "expression": {
                      "id": 62019,
                      "name": "loanTerms",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61925,
                      "src": "25342:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                        "typeString": "struct PWNSimpleLoan.Terms memory"
                      }
                    },
                    "id": 62020,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "25352:6:86",
                    "memberName": "credit",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 61045,
                    "src": "25342:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                      "typeString": "struct MultiToken.Asset memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25303:55:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 62026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62022,
                        "name": "lenderSpec",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61928,
                        "src": "25418:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                        }
                      },
                      "id": 62023,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "25429:13:86",
                      "memberName": "sourceOfFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61066,
                      "src": "25418:24:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 62024,
                        "name": "loanTerms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61925,
                        "src": "25446:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                          "typeString": "struct PWNSimpleLoan.Terms memory"
                        }
                      },
                      "id": 62025,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "25456:6:86",
                      "memberName": "lender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61035,
                      "src": "25446:16:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "25418:44:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62048,
                  "nodeType": "IfStatement",
                  "src": "25414:285:86",
                  "trueBody": {
                    "id": 62047,
                    "nodeType": "Block",
                    "src": "25464:235:86",
                    "statements": [
                      {
                        "expression": {
                          "id": 62039,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 62027,
                              "name": "creditHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62018,
                              "src": "25535:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            "id": 62029,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "25548:6:86",
                            "memberName": "amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59,
                            "src": "25535:19:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 62038,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 62036,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 62030,
                                "name": "feeAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61952,
                                "src": "25557:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "components": [
                                  {
                                    "condition": {
                                      "id": 62031,
                                      "name": "shouldTransferCommon",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 61996,
                                      "src": "25570:20:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "hexValue": "30",
                                      "id": 62033,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "25602:1:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "id": 62034,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "25570:33:86",
                                    "trueExpression": {
                                      "id": 62032,
                                      "name": "common",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 61966,
                                      "src": "25593:6:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 62035,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "25569:35:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25557:47:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 62037,
                              "name": "surplus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61974,
                              "src": "25607:7:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "25557:57:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25535:79:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 62040,
                        "nodeType": "ExpressionStatement",
                        "src": "25535:79:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 62042,
                              "name": "creditHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62018,
                              "src": "25652:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            {
                              "id": 62043,
                              "name": "loanTerms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61925,
                              "src": "25666:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                "typeString": "struct PWNSimpleLoan.Terms memory"
                              }
                            },
                            {
                              "id": 62044,
                              "name": "lenderSpec",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61928,
                              "src": "25677:10:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                "typeString": "struct PWNSimpleLoan.Terms memory"
                              },
                              {
                                "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                              }
                            ],
                            "id": 62041,
                            "name": "_withdrawCreditFromPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62192,
                            "src": "25628:23:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_struct$_Terms_$61054_memory_ptr_$_t_struct$_LenderSpec_$61067_calldata_ptr_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory,struct PWNSimpleLoan.Terms memory,struct PWNSimpleLoan.LenderSpec calldata)"
                            }
                          },
                          "id": 62045,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25628:60:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62046,
                        "nodeType": "ExpressionStatement",
                        "src": "25628:60:86"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 62051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 62049,
                      "name": "feeAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61952,
                      "src": "25737:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 62050,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25749:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "25737:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62068,
                  "nodeType": "IfStatement",
                  "src": "25733:153:86",
                  "trueBody": {
                    "id": 62067,
                    "nodeType": "Block",
                    "src": "25752:134:86",
                    "statements": [
                      {
                        "expression": {
                          "id": 62056,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 62052,
                              "name": "creditHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62018,
                              "src": "25766:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            "id": 62054,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "25779:6:86",
                            "memberName": "amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59,
                            "src": "25766:19:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 62055,
                            "name": "feeAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61952,
                            "src": "25788:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25766:31:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 62057,
                        "nodeType": "ExpressionStatement",
                        "src": "25766:31:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 62059,
                              "name": "creditHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62018,
                              "src": "25821:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 62060,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61925,
                                "src": "25835:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 62061,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "25845:6:86",
                              "memberName": "lender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61035,
                              "src": "25835:16:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 62062,
                                  "name": "config",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 61027,
                                  "src": "25853:6:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_PWNConfig_$60390",
                                    "typeString": "contract PWNConfig"
                                  }
                                },
                                "id": 62063,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "25860:12:86",
                                "memberName": "feeCollector",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 60011,
                                "src": "25853:19:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 62064,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25853:21:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 62058,
                            "name": "_pushFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 65946,
                            "src": "25811:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory,address,address)"
                            }
                          },
                          "id": 62065,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25811:64:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62066,
                        "nodeType": "ExpressionStatement",
                        "src": "25811:64:86"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 62069,
                    "name": "shouldTransferCommon",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 61996,
                    "src": "25960:20:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62083,
                  "nodeType": "IfStatement",
                  "src": "25956:130:86",
                  "trueBody": {
                    "id": 62082,
                    "nodeType": "Block",
                    "src": "25982:104:86",
                    "statements": [
                      {
                        "expression": {
                          "id": 62074,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 62070,
                              "name": "creditHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62018,
                              "src": "25996:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            "id": 62072,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "26009:6:86",
                            "memberName": "amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59,
                            "src": "25996:19:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 62073,
                            "name": "common",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61966,
                            "src": "26018:6:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25996:28:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 62075,
                        "nodeType": "ExpressionStatement",
                        "src": "25996:28:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 62077,
                              "name": "creditHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62018,
                              "src": "26044:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 62078,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61925,
                                "src": "26058:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 62079,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "26068:6:86",
                              "memberName": "lender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61035,
                              "src": "26058:16:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 62076,
                            "name": "_pull",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 65868,
                            "src": "26038:5:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory,address)"
                            }
                          },
                          "id": 62080,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26038:37:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62081,
                        "nodeType": "ExpressionStatement",
                        "src": "26038:37:86"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 62086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 62084,
                      "name": "surplus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61974,
                      "src": "26146:7:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 62085,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26156:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "26146:11:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 62104,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 62102,
                        "name": "shortage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61985,
                        "src": "26387:8:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 62103,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "26398:1:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "26387:12:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 62118,
                    "nodeType": "IfStatement",
                    "src": "26383:218:86",
                    "trueBody": {
                      "id": 62117,
                      "nodeType": "Block",
                      "src": "26401:200:86",
                      "statements": [
                        {
                          "expression": {
                            "id": 62109,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "expression": {
                                "id": 62105,
                                "name": "creditHelper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62018,
                                "src": "26507:12:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                  "typeString": "struct MultiToken.Asset memory"
                                }
                              },
                              "id": 62107,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "memberLocation": "26520:6:86",
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 59,
                              "src": "26507:19:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "id": 62108,
                              "name": "shortage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61985,
                              "src": "26529:8:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "26507:30:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 62110,
                          "nodeType": "ExpressionStatement",
                          "src": "26507:30:86"
                        },
                        {
                          "expression": {
                            "arguments": [
                              {
                                "id": 62112,
                                "name": "creditHelper",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62018,
                                "src": "26557:12:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                  "typeString": "struct MultiToken.Asset memory"
                                }
                              },
                              {
                                "expression": {
                                  "id": 62113,
                                  "name": "loanTerms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 61925,
                                  "src": "26571:9:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                    "typeString": "struct PWNSimpleLoan.Terms memory"
                                  }
                                },
                                "id": 62114,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26581:8:86",
                                "memberName": "borrower",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 61037,
                                "src": "26571:18:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                  "typeString": "struct MultiToken.Asset memory"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 62111,
                              "name": "_pull",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 65868,
                              "src": "26551:5:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$returns$__$",
                                "typeString": "function (struct MultiToken.Asset memory,address)"
                              }
                            },
                            "id": 62115,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26551:39:86",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 62116,
                          "nodeType": "ExpressionStatement",
                          "src": "26551:39:86"
                        }
                      ]
                    }
                  },
                  "id": 62119,
                  "nodeType": "IfStatement",
                  "src": "26142:459:86",
                  "trueBody": {
                    "id": 62101,
                    "nodeType": "Block",
                    "src": "26159:218:86",
                    "statements": [
                      {
                        "expression": {
                          "id": 62091,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 62087,
                              "name": "creditHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62018,
                              "src": "26262:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            "id": 62089,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "26275:6:86",
                            "memberName": "amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 59,
                            "src": "26262:19:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 62090,
                            "name": "surplus",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61974,
                            "src": "26284:7:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26262:29:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 62092,
                        "nodeType": "ExpressionStatement",
                        "src": "26262:29:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 62094,
                              "name": "creditHelper",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62018,
                              "src": "26315:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 62095,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61925,
                                "src": "26329:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 62096,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "26339:6:86",
                              "memberName": "lender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61035,
                              "src": "26329:16:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 62097,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61925,
                                "src": "26347:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 62098,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "26357:8:86",
                              "memberName": "borrower",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61037,
                              "src": "26347:18:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 62093,
                            "name": "_pushFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 65946,
                            "src": "26305:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory,address,address)"
                            }
                          },
                          "id": 62099,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26305:61:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62100,
                        "nodeType": "ExpressionStatement",
                        "src": "26305:61:86"
                      }
                    ]
                  }
                },
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 62132,
                        "nodeType": "Block",
                        "src": "26831:2:86",
                        "statements": []
                      },
                      "errorName": "",
                      "id": 62133,
                      "nodeType": "TryCatchClause",
                      "src": "26831:2:86"
                    },
                    {
                      "block": {
                        "id": 62134,
                        "nodeType": "Block",
                        "src": "26840:293:86",
                        "statements": []
                      },
                      "errorName": "",
                      "id": 62135,
                      "nodeType": "TryCatchClause",
                      "src": "26834:299:86"
                    }
                  ],
                  "externalCall": {
                    "arguments": [
                      {
                        "id": 62122,
                        "name": "refinancingLoanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61922,
                        "src": "26694:17:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 62129,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "components": [
                            {
                              "condition": {
                                "id": 62123,
                                "name": "shouldTransferCommon",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61996,
                                "src": "26740:20:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "hexValue": "30",
                                "id": 62125,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "26772:1:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "id": 62126,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "26740:33:86",
                              "trueExpression": {
                                "id": 62124,
                                "name": "common",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 61966,
                                "src": "26763:6:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 62127,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "26739:35:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "id": 62128,
                          "name": "shortage",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61985,
                          "src": "26777:8:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "26739:46:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 62130,
                        "name": "loanOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61939,
                        "src": "26810:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 62120,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -28,
                        "src": "26648:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PWNSimpleLoan_$63281",
                          "typeString": "contract PWNSimpleLoan"
                        }
                      },
                      "id": 62121,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "26653:18:86",
                      "memberName": "tryClaimRepaidLOAN",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 62624,
                      "src": "26648:23:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,uint256,address) external"
                      }
                    },
                    "id": 62131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "26686:6:86",
                      "26725:12:86",
                      "26799:9:86"
                    ],
                    "names": [
                      "loanId",
                      "creditAmount",
                      "loanOwner"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "26648:182:86",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62136,
                  "nodeType": "TryStatement",
                  "src": "26644:489:86"
                }
              ]
            },
            "documentation": {
              "id": 61920,
              "nodeType": "StructuredDocumentation",
              "src": "23362:569:86",
              "text": " @notice Settle the refinanced loan. If the new lender is the same as the current LOAN owner,\n         the function will transfer only the surplus to the borrower, if any.\n         If the new loan amount is not enough to cover the original loan, the borrower needs to contribute.\n         The function assumes a prior token approval to a contract address or signed permits.\n @param refinancingLoanId Id of a loan to be refinanced.\n @param loanTerms Loan terms struct.\n @param lenderSpec Lender specification struct."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_settleLoanRefinance",
            "nameLocation": "23945:20:86",
            "parameters": {
              "id": 61929,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 61922,
                  "mutability": "mutable",
                  "name": "refinancingLoanId",
                  "nameLocation": "23983:17:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62138,
                  "src": "23975:25:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 61921,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23975:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61925,
                  "mutability": "mutable",
                  "name": "loanTerms",
                  "nameLocation": "24023:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62138,
                  "src": "24010:22:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                    "typeString": "struct PWNSimpleLoan.Terms"
                  },
                  "typeName": {
                    "id": 61924,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61923,
                      "name": "Terms",
                      "nameLocations": [
                        "24010:5:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61054,
                      "src": "24010:5:86"
                    },
                    "referencedDeclaration": 61054,
                    "src": "24010:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Terms_$61054_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.Terms"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 61928,
                  "mutability": "mutable",
                  "name": "lenderSpec",
                  "nameLocation": "24062:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62138,
                  "src": "24042:30:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                    "typeString": "struct PWNSimpleLoan.LenderSpec"
                  },
                  "typeName": {
                    "id": 61927,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 61926,
                      "name": "LenderSpec",
                      "nameLocations": [
                        "24042:10:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61067,
                      "src": "24042:10:86"
                    },
                    "referencedDeclaration": 61067,
                    "src": "24042:10:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LenderSpec_$61067_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.LenderSpec"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23965:113:86"
            },
            "returnParameters": {
              "id": 61930,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24087:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 62192,
            "nodeType": "FunctionDefinition",
            "src": "27461:536:86",
            "nodes": [],
            "body": {
              "id": 62191,
              "nodeType": "Block",
              "src": "27620:377:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    62153
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62153,
                      "mutability": "mutable",
                      "name": "poolAdapter",
                      "nameLocation": "27643:11:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62191,
                      "src": "27630:24:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                        "typeString": "contract IPoolAdapter"
                      },
                      "typeName": {
                        "id": 62152,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62151,
                          "name": "IPoolAdapter",
                          "nameLocations": [
                            "27630:12:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 60696,
                          "src": "27630:12:86"
                        },
                        "referencedDeclaration": 60696,
                        "src": "27630:12:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                          "typeString": "contract IPoolAdapter"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62159,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 62156,
                          "name": "lenderSpec",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62148,
                          "src": "27679:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                          }
                        },
                        "id": 62157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "27690:13:86",
                        "memberName": "sourceOfFunds",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61066,
                        "src": "27679:24:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 62154,
                        "name": "config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61027,
                        "src": "27657:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PWNConfig_$60390",
                          "typeString": "contract PWNConfig"
                        }
                      },
                      "id": 62155,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "27664:14:86",
                      "memberName": "getPoolAdapter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60372,
                      "src": "27657:21:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_contract$_IPoolAdapter_$60696_$",
                        "typeString": "function (address) view external returns (contract IPoolAdapter)"
                      }
                    },
                    "id": 62158,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27657:47:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                      "typeString": "contract IPoolAdapter"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27630:74:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 62168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 62162,
                          "name": "poolAdapter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62153,
                          "src": "27726:11:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                            "typeString": "contract IPoolAdapter"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                            "typeString": "contract IPoolAdapter"
                          }
                        ],
                        "id": 62161,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "27718:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 62160,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "27718:7:86",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 62163,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27718:20:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 62166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "27750:1:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 62165,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "27742:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 62164,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "27742:7:86",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 62167,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27742:10:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "27718:34:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62175,
                  "nodeType": "IfStatement",
                  "src": "27714:137:86",
                  "trueBody": {
                    "id": 62174,
                    "nodeType": "Block",
                    "src": "27754:97:86",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 62170,
                                "name": "lenderSpec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62148,
                                "src": "27813:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                                }
                              },
                              "id": 62171,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "27824:13:86",
                              "memberName": "sourceOfFunds",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61066,
                              "src": "27813:24:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 62169,
                            "name": "InvalidSourceOfFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61245,
                            "src": "27775:20:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                              "typeString": "function (address) pure"
                            }
                          },
                          "id": 62172,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "27798:13:86"
                          ],
                          "names": [
                            "sourceOfFunds"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "27775:65:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62173,
                        "nodeType": "RevertStatement",
                        "src": "27768:72:86"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 62179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62176,
                        "name": "credit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62142,
                        "src": "27865:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        }
                      },
                      "id": 62177,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "27872:6:86",
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 59,
                      "src": "27865:13:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 62178,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27881:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "27865:17:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62190,
                  "nodeType": "IfStatement",
                  "src": "27861:130:86",
                  "trueBody": {
                    "id": 62189,
                    "nodeType": "Block",
                    "src": "27884:107:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 62181,
                              "name": "credit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62142,
                              "src": "27916:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            {
                              "id": 62182,
                              "name": "poolAdapter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62153,
                              "src": "27924:11:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                                "typeString": "contract IPoolAdapter"
                              }
                            },
                            {
                              "expression": {
                                "id": 62183,
                                "name": "lenderSpec",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62148,
                                "src": "27937:10:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.LenderSpec calldata"
                                }
                              },
                              "id": 62184,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "27948:13:86",
                              "memberName": "sourceOfFunds",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61066,
                              "src": "27937:24:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 62185,
                                "name": "loanTerms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62145,
                                "src": "27963:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                                  "typeString": "struct PWNSimpleLoan.Terms memory"
                                }
                              },
                              "id": 62186,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "27973:6:86",
                              "memberName": "lender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61035,
                              "src": "27963:16:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              },
                              {
                                "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                                "typeString": "contract IPoolAdapter"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 62180,
                            "name": "_withdrawFromPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 65996,
                            "src": "27898:17:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_contract$_IPoolAdapter_$60696_$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory,contract IPoolAdapter,address,address)"
                            }
                          },
                          "id": 62187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "27898:82:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62188,
                        "nodeType": "ExpressionStatement",
                        "src": "27898:82:86"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 62139,
              "nodeType": "StructuredDocumentation",
              "src": "27145:311:86",
              "text": " @notice Withdraw a credit asset from a pool to the Vault.\n @dev The function will revert if pool doesn't have registered pool adapter.\n @param credit Asset to be pulled from the pool.\n @param loanTerms Loan terms struct.\n @param lenderSpec Lender specification struct."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_withdrawCreditFromPool",
            "nameLocation": "27470:23:86",
            "parameters": {
              "id": 62149,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62142,
                  "mutability": "mutable",
                  "name": "credit",
                  "nameLocation": "27527:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62192,
                  "src": "27503:30:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                    "typeString": "struct MultiToken.Asset"
                  },
                  "typeName": {
                    "id": 62141,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 62140,
                      "name": "MultiToken.Asset",
                      "nameLocations": [
                        "27503:10:86",
                        "27514:5:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 60,
                      "src": "27503:16:86"
                    },
                    "referencedDeclaration": 60,
                    "src": "27503:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                      "typeString": "struct MultiToken.Asset"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 62145,
                  "mutability": "mutable",
                  "name": "loanTerms",
                  "nameLocation": "27556:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62192,
                  "src": "27543:22:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Terms_$61054_memory_ptr",
                    "typeString": "struct PWNSimpleLoan.Terms"
                  },
                  "typeName": {
                    "id": 62144,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 62143,
                      "name": "Terms",
                      "nameLocations": [
                        "27543:5:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61054,
                      "src": "27543:5:86"
                    },
                    "referencedDeclaration": 61054,
                    "src": "27543:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Terms_$61054_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.Terms"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 62148,
                  "mutability": "mutable",
                  "name": "lenderSpec",
                  "nameLocation": "27595:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62192,
                  "src": "27575:30:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_LenderSpec_$61067_calldata_ptr",
                    "typeString": "struct PWNSimpleLoan.LenderSpec"
                  },
                  "typeName": {
                    "id": 62147,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 62146,
                      "name": "LenderSpec",
                      "nameLocations": [
                        "27575:10:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61067,
                      "src": "27575:10:86"
                    },
                    "referencedDeclaration": 61067,
                    "src": "27575:10:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LenderSpec_$61067_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.LenderSpec"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27493:118:86"
            },
            "returnParameters": {
              "id": 62150,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27620:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 62284,
            "nodeType": "FunctionDefinition",
            "src": "28888:1249:86",
            "nodes": [],
            "body": {
              "id": 62283,
              "nodeType": "Block",
              "src": "28981:1156:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    62202
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62202,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "29004:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62283,
                      "src": "28991:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 62201,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62200,
                          "name": "LOAN",
                          "nameLocations": [
                            "28991:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "28991:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "28991:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62206,
                  "initialValue": {
                    "baseExpression": {
                      "id": 62203,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "29011:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 62205,
                    "indexExpression": {
                      "id": 62204,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62195,
                      "src": "29017:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "29011:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28991:33:86"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 62208,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62202,
                          "src": "29057:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        },
                        "id": 62209,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "29062:6:86",
                        "memberName": "status",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61078,
                        "src": "29057:11:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "expression": {
                          "id": 62210,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62202,
                          "src": "29070:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        },
                        "id": 62211,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "29075:16:86",
                        "memberName": "defaultTimestamp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61086,
                        "src": "29070:21:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "id": 62207,
                      "name": "_checkLoanCanBeRepaid",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62316,
                      "src": "29035:21:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint8_$_t_uint40_$returns$__$",
                        "typeString": "function (uint8,uint40) view"
                      }
                    },
                    "id": 62212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29035:57:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62213,
                  "nodeType": "ExpressionStatement",
                  "src": "29035:57:86"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 62215,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62195,
                        "src": "29160:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 62214,
                      "name": "_updateRepaidLoan",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62354,
                      "src": "29142:17:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 62216,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29142:25:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62217,
                  "nodeType": "ExpressionStatement",
                  "src": "29142:25:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 62221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62218,
                        "name": "permitData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62197,
                        "src": "29223:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      "id": 62219,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "29234:6:86",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "29223:17:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 62220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "29243:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "29223:21:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62245,
                  "nodeType": "IfStatement",
                  "src": "29219:205:86",
                  "trueBody": {
                    "id": 62244,
                    "nodeType": "Block",
                    "src": "29246:178:86",
                    "statements": [
                      {
                        "assignments": [
                          62224
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 62224,
                            "mutability": "mutable",
                            "name": "permit",
                            "nameLocation": "29274:6:86",
                            "nodeType": "VariableDeclaration",
                            "scope": 62244,
                            "src": "29260:20:86",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                              "typeString": "struct Permit"
                            },
                            "typeName": {
                              "id": 62223,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 62222,
                                "name": "Permit",
                                "nameLocations": [
                                  "29260:6:86"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 66282,
                                "src": "29260:6:86"
                              },
                              "referencedDeclaration": 66282,
                              "src": "29260:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Permit_$66282_storage_ptr",
                                "typeString": "struct Permit"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 62231,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 62227,
                              "name": "permitData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62197,
                              "src": "29294:10:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "components": [
                                {
                                  "id": 62228,
                                  "name": "Permit",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 66282,
                                  "src": "29307:6:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_struct$_Permit_$66282_storage_ptr_$",
                                    "typeString": "type(struct Permit storage pointer)"
                                  }
                                }
                              ],
                              "id": 62229,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "29306:8:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_Permit_$66282_storage_ptr_$",
                                "typeString": "type(struct Permit storage pointer)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_type$_t_struct$_Permit_$66282_storage_ptr_$",
                                "typeString": "type(struct Permit storage pointer)"
                              }
                            ],
                            "expression": {
                              "id": 62225,
                              "name": "abi",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -1,
                              "src": "29283:3:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_abi",
                                "typeString": "abi"
                              }
                            },
                            "id": 62226,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "29287:6:86",
                            "memberName": "decode",
                            "nodeType": "MemberAccess",
                            "src": "29283:10:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 62230,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29283:32:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                            "typeString": "struct Permit memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29260:55:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 62233,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "29342:3:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 62234,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "29346:6:86",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "29342:10:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 62235,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62202,
                                "src": "29354:4:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                  "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                }
                              },
                              "id": 62236,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "29359:13:86",
                              "memberName": "creditAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61080,
                              "src": "29354:18:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 62237,
                              "name": "permit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62224,
                              "src": "29374:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                "typeString": "struct Permit memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                "typeString": "struct Permit memory"
                              }
                            ],
                            "id": 62232,
                            "name": "_checkPermit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61611,
                            "src": "29329:12:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_struct$_Permit_$66282_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,struct Permit memory) pure"
                            }
                          },
                          "id": 62238,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29329:52:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62239,
                        "nodeType": "ExpressionStatement",
                        "src": "29329:52:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 62241,
                              "name": "permit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62224,
                              "src": "29406:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                "typeString": "struct Permit memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                "typeString": "struct Permit memory"
                              }
                            ],
                            "id": 62240,
                            "name": "_tryPermit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66148,
                            "src": "29395:10:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Permit_$66282_memory_ptr_$returns$__$",
                              "typeString": "function (struct Permit memory)"
                            }
                          },
                          "id": 62242,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29395:18:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62243,
                        "nodeType": "ExpressionStatement",
                        "src": "29395:18:86"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    62247
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62247,
                      "mutability": "mutable",
                      "name": "repaymentAmount",
                      "nameLocation": "29493:15:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62283,
                      "src": "29485:23:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 62246,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29485:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62251,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 62249,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62195,
                        "src": "29532:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 62248,
                      "name": "_loanRepaymentAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62404,
                      "src": "29511:20:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 62250,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29511:28:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29485:54:86"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 62256,
                            "name": "repaymentAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62247,
                            "src": "29580:15:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "expression": {
                              "id": 62253,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62202,
                              "src": "29555:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                              }
                            },
                            "id": 62254,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "29560:13:86",
                            "memberName": "creditAddress",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61080,
                            "src": "29555:18:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 62255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "29574:5:86",
                          "memberName": "ERC20",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 85,
                          "src": "29555:24:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_struct$_Asset_$60_memory_ptr_$bound_to$_t_address_$",
                            "typeString": "function (address,uint256) pure returns (struct MultiToken.Asset memory)"
                          }
                        },
                        "id": 62257,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "29555:41:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        }
                      },
                      {
                        "expression": {
                          "id": 62258,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "29598:3:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 62259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "29602:6:86",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "29598:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 62252,
                      "name": "_pull",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65868,
                      "src": "29549:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (struct MultiToken.Asset memory,address)"
                      }
                    },
                    "id": 62260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29549:60:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62261,
                  "nodeType": "ExpressionStatement",
                  "src": "29549:60:86"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 62263,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62202,
                          "src": "29674:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        },
                        "id": 62264,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "29679:10:86",
                        "memberName": "collateral",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61099,
                        "src": "29674:15:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_storage",
                          "typeString": "struct MultiToken.Asset storage ref"
                        }
                      },
                      {
                        "expression": {
                          "id": 62265,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62202,
                          "src": "29691:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        },
                        "id": 62266,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "29696:8:86",
                        "memberName": "borrower",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61088,
                        "src": "29691:13:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Asset_$60_storage",
                          "typeString": "struct MultiToken.Asset storage ref"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 62262,
                      "name": "_push",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65907,
                      "src": "29668:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (struct MultiToken.Asset memory,address)"
                      }
                    },
                    "id": 62267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29668:37:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62268,
                  "nodeType": "ExpressionStatement",
                  "src": "29668:37:86"
                },
                {
                  "clauses": [
                    {
                      "block": {
                        "id": 62278,
                        "nodeType": "Block",
                        "src": "29829:2:86",
                        "statements": []
                      },
                      "errorName": "",
                      "id": 62279,
                      "nodeType": "TryCatchClause",
                      "src": "29829:2:86"
                    },
                    {
                      "block": {
                        "id": 62280,
                        "nodeType": "Block",
                        "src": "29838:293:86",
                        "statements": []
                      },
                      "errorName": "",
                      "id": 62281,
                      "nodeType": "TryCatchClause",
                      "src": "29832:299:86"
                    }
                  ],
                  "externalCall": {
                    "arguments": [
                      {
                        "id": 62271,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62195,
                        "src": "29777:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 62272,
                        "name": "repaymentAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62247,
                        "src": "29785:15:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 62275,
                            "name": "loanId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62195,
                            "src": "29820:6:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 62273,
                            "name": "loanToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61024,
                            "src": "29802:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PWNLOAN_$65743",
                              "typeString": "contract PWNLOAN"
                            }
                          },
                          "id": 62274,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "29812:7:86",
                          "memberName": "ownerOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 51449,
                          "src": "29802:17:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                            "typeString": "function (uint256) view external returns (address)"
                          }
                        },
                        "id": 62276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "29802:25:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 62269,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -28,
                        "src": "29753:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PWNSimpleLoan_$63281",
                          "typeString": "contract PWNSimpleLoan"
                        }
                      },
                      "id": 62270,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "29758:18:86",
                      "memberName": "tryClaimRepaidLOAN",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 62624,
                      "src": "29753:23:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (uint256,uint256,address) external"
                      }
                    },
                    "id": 62277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29753:75:86",
                    "tryCall": true,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62282,
                  "nodeType": "TryStatement",
                  "src": "29749:382:86"
                }
              ]
            },
            "documentation": {
              "id": 62193,
              "nodeType": "StructuredDocumentation",
              "src": "28206:677:86",
              "text": " @notice Repay running loan.\n @dev Any address can repay a running loan, but a collateral will be transferred to a borrower address associated with the loan.\n      If the LOAN token holder is the same as the original lender, the repayment credit asset will be\n      transferred to the LOAN token holder directly. Otherwise it will transfer the repayment credit asset to\n      a vault, waiting on a LOAN token holder to claim it. The function assumes a prior token approval to a contract address\n      or a signed permit.\n @param loanId Id of a loan that is being repaid.\n @param permitData Callers credit permit data."
            },
            "functionSelector": "632c6a23",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "repayLOAN",
            "nameLocation": "28897:9:86",
            "parameters": {
              "id": 62198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62195,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "28924:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62284,
                  "src": "28916:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62194,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "28916:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 62197,
                  "mutability": "mutable",
                  "name": "permitData",
                  "nameLocation": "28955:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62284,
                  "src": "28940:25:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 62196,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "28940:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "28906:65:86"
            },
            "returnParameters": {
              "id": 62199,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28981:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 62316,
            "nodeType": "FunctionDefinition",
            "src": "30363:474:86",
            "nodes": [],
            "body": {
              "id": 62315,
              "nodeType": "Block",
              "src": "30446:391:86",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 62294,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 62292,
                      "name": "status",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62287,
                      "src": "30536:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 62293,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30546:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "30536:11:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62298,
                  "nodeType": "IfStatement",
                  "src": "30532:53:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 62295,
                        "name": "NonExistingLoan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61200,
                        "src": "30568:15:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 62296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30568:17:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62297,
                    "nodeType": "RevertStatement",
                    "src": "30561:24:86"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 62301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 62299,
                      "name": "status",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62287,
                      "src": "30637:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "32",
                      "id": 62300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "30647:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "30637:11:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62305,
                  "nodeType": "IfStatement",
                  "src": "30633:52:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 62302,
                        "name": "LoanNotRunning",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61186,
                        "src": "30669:14:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 62303,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30669:16:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62304,
                    "nodeType": "RevertStatement",
                    "src": "30662:23:86"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 62309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 62306,
                      "name": "defaultTimestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62289,
                      "src": "30743:16:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "expression": {
                        "id": 62307,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "30763:5:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 62308,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "30769:9:86",
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "30763:15:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "30743:35:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62314,
                  "nodeType": "IfStatement",
                  "src": "30739:91:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 62311,
                          "name": "defaultTimestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62289,
                          "src": "30813:16:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        ],
                        "id": 62310,
                        "name": "LoanDefaulted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61197,
                        "src": "30799:13:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_uint40_$returns$__$",
                          "typeString": "function (uint40) pure"
                        }
                      },
                      "id": 62312,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30799:31:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62313,
                    "nodeType": "RevertStatement",
                    "src": "30792:38:86"
                  }
                }
              ]
            },
            "documentation": {
              "id": 62285,
              "nodeType": "StructuredDocumentation",
              "src": "30143:215:86",
              "text": " @notice Check if the loan can be repaid.\n @dev The function will revert if the loan cannot be repaid.\n @param status Loan status.\n @param defaultTimestamp Loan default timestamp."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkLoanCanBeRepaid",
            "nameLocation": "30372:21:86",
            "parameters": {
              "id": 62290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62287,
                  "mutability": "mutable",
                  "name": "status",
                  "nameLocation": "30400:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62316,
                  "src": "30394:12:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 62286,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "30394:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 62289,
                  "mutability": "mutable",
                  "name": "defaultTimestamp",
                  "nameLocation": "30415:16:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62316,
                  "src": "30408:23:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 62288,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "30408:6:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30393:39:86"
            },
            "returnParameters": {
              "id": 62291,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30446:0:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 62354,
            "nodeType": "FunctionDefinition",
            "src": "30959:598:86",
            "nodes": [],
            "body": {
              "id": 62353,
              "nodeType": "Block",
              "src": "31010:547:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    62324
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62324,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "31033:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62353,
                      "src": "31020:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 62323,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62322,
                          "name": "LOAN",
                          "nameLocations": [
                            "31020:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "31020:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "31020:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62328,
                  "initialValue": {
                    "baseExpression": {
                      "id": 62325,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "31040:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 62327,
                    "indexExpression": {
                      "id": 62326,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62319,
                      "src": "31046:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "31040:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31020:33:86"
                },
                {
                  "expression": {
                    "id": 62333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 62329,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62324,
                        "src": "31156:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62331,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "31161:6:86",
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61078,
                      "src": "31156:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "33",
                      "id": 62332,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31170:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "src": "31156:15:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 62334,
                  "nodeType": "ExpressionStatement",
                  "src": "31156:15:86"
                },
                {
                  "expression": {
                    "id": 62341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 62335,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62324,
                        "src": "31224:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62337,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "31229:19:86",
                      "memberName": "fixedInterestAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61094,
                      "src": "31224:24:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 62339,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62324,
                          "src": "31272:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        ],
                        "id": 62338,
                        "name": "_loanAccruedInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62451,
                        "src": "31251:20:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_LOAN_$61100_storage_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct PWNSimpleLoan.LOAN storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 62340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31251:26:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31224:53:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 62342,
                  "nodeType": "ExpressionStatement",
                  "src": "31224:53:86"
                },
                {
                  "expression": {
                    "id": 62347,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 62343,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62324,
                        "src": "31287:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62345,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "31292:25:86",
                      "memberName": "accruingInterestDailyRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61092,
                      "src": "31287:30:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 62346,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31320:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "31287:34:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "id": 62348,
                  "nodeType": "ExpressionStatement",
                  "src": "31287:34:86"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 62350,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62319,
                        "src": "31541:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 62349,
                      "name": "LOANPaidBack",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61157,
                      "src": "31518:12:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 62351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "31533:6:86"
                    ],
                    "names": [
                      "loanId"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "31518:32:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62352,
                  "nodeType": "EmitStatement",
                  "src": "31513:37:86"
                }
              ]
            },
            "documentation": {
              "id": 62317,
              "nodeType": "StructuredDocumentation",
              "src": "30843:111:86",
              "text": " @notice Update loan to repaid state.\n @param loanId Id of a loan that is being repaid."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_updateRepaidLoan",
            "nameLocation": "30968:17:86",
            "parameters": {
              "id": 62320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62319,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "30994:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62354,
                  "src": "30986:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62318,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "30986:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30985:16:86"
            },
            "returnParameters": {
              "id": 62321,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31010:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 62381,
            "nodeType": "FunctionDefinition",
            "src": "31934:242:86",
            "nodes": [],
            "body": {
              "id": 62380,
              "nodeType": "Block",
              "src": "32009:167:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    62364
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62364,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "32032:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62380,
                      "src": "32019:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 62363,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62362,
                          "name": "LOAN",
                          "nameLocations": [
                            "32019:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "32019:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "32019:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62368,
                  "initialValue": {
                    "baseExpression": {
                      "id": 62365,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "32039:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 62367,
                    "indexExpression": {
                      "id": 62366,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62357,
                      "src": "32045:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "32039:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32019:33:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 62372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62369,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62364,
                        "src": "32097:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62370,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "32102:6:86",
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61078,
                      "src": "32097:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 62371,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32112:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "32097:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62375,
                  "nodeType": "IfStatement",
                  "src": "32093:30:86",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 62373,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32122:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 62361,
                    "id": 62374,
                    "nodeType": "Return",
                    "src": "32115:8:86"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 62377,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62357,
                        "src": "32162:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 62376,
                      "name": "_loanRepaymentAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62404,
                      "src": "32141:20:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 62378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32141:28:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 62361,
                  "id": 62379,
                  "nodeType": "Return",
                  "src": "32134:35:86"
                }
              ]
            },
            "documentation": {
              "id": 62355,
              "nodeType": "StructuredDocumentation",
              "src": "31766:163:86",
              "text": " @notice Calculate the loan repayment amount with fixed and accrued interest.\n @param loanId Id of a loan.\n @return Repayment amount."
            },
            "functionSelector": "2c3eae8a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "loanRepaymentAmount",
            "nameLocation": "31943:19:86",
            "parameters": {
              "id": 62358,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62357,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "31971:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62381,
                  "src": "31963:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62356,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31963:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31962:16:86"
            },
            "returnParameters": {
              "id": 62361,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62360,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 62381,
                  "src": "32000:7:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62359,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32000:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31999:9:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 62404,
            "nodeType": "FunctionDefinition",
            "src": "32371:249:86",
            "nodes": [],
            "body": {
              "id": 62403,
              "nodeType": "Block",
              "src": "32448:172:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    62391
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62391,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "32471:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62403,
                      "src": "32458:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 62390,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62389,
                          "name": "LOAN",
                          "nameLocations": [
                            "32458:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "32458:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "32458:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62395,
                  "initialValue": {
                    "baseExpression": {
                      "id": 62392,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "32478:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 62394,
                    "indexExpression": {
                      "id": 62393,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62384,
                      "src": "32484:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "32478:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32458:33:86"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 62401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62396,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62391,
                        "src": "32564:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62397,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "32569:15:86",
                      "memberName": "principalAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61096,
                      "src": "32564:20:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 62399,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62391,
                          "src": "32608:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        ],
                        "id": 62398,
                        "name": "_loanAccruedInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62451,
                        "src": "32587:20:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_LOAN_$61100_storage_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct PWNSimpleLoan.LOAN storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 62400,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "32587:26:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "32564:49:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 62388,
                  "id": 62402,
                  "nodeType": "Return",
                  "src": "32557:56:86"
                }
              ]
            },
            "documentation": {
              "id": 62382,
              "nodeType": "StructuredDocumentation",
              "src": "32182:184:86",
              "text": " @notice Internal function to calculate the loan repayment amount with fixed and accrued interest.\n @param loanId Id of a loan.\n @return Repayment amount."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_loanRepaymentAmount",
            "nameLocation": "32380:20:86",
            "parameters": {
              "id": 62385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62384,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "32409:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62404,
                  "src": "32401:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62383,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32401:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "32400:16:86"
            },
            "returnParameters": {
              "id": 62388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62387,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 62404,
                  "src": "32439:7:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62386,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32439:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "32438:9:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 62451,
            "nodeType": "FunctionDefinition",
            "src": "32771:488:86",
            "nodes": [],
            "body": {
              "id": 62450,
              "nodeType": "Block",
              "src": "32851:408:86",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    },
                    "id": 62416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62413,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62408,
                        "src": "32865:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62414,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "32870:25:86",
                      "memberName": "accruingInterestDailyRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61092,
                      "src": "32865:30:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 62415,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "32899:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "32865:35:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62420,
                  "nodeType": "IfStatement",
                  "src": "32861:84:86",
                  "trueBody": {
                    "expression": {
                      "expression": {
                        "id": 62417,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62408,
                        "src": "32921:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62418,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "32926:19:86",
                      "memberName": "fixedInterestAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61094,
                      "src": "32921:24:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 62412,
                    "id": 62419,
                    "nodeType": "Return",
                    "src": "32914:31:86"
                  }
                },
                {
                  "assignments": [
                    62422
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62422,
                      "mutability": "mutable",
                      "name": "accruingDays",
                      "nameLocation": "32964:12:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62450,
                      "src": "32956:20:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 62421,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "32956:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62431,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 62430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 62427,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 62423,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "32980:5:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 62424,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "32986:9:86",
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "32980:15:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "expression": {
                              "id": 62425,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62408,
                              "src": "32998:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                              }
                            },
                            "id": 62426,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "33003:14:86",
                            "memberName": "startTimestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61084,
                            "src": "32998:19:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          },
                          "src": "32980:37:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 62428,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "32979:39:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 62429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "33021:6:86",
                      "subdenomination": "days",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_86400_by_1",
                        "typeString": "int_const 86400"
                      },
                      "value": "1"
                    },
                    "src": "32979:48:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32956:71:86"
                },
                {
                  "assignments": [
                    62433
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62433,
                      "mutability": "mutable",
                      "name": "accruedInterest",
                      "nameLocation": "33045:15:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62450,
                      "src": "33037:23:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 62432,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "33037:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62444,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 62436,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62408,
                          "src": "33088:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        },
                        "id": 62437,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "33093:15:86",
                        "memberName": "principalAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61096,
                        "src": "33088:20:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 62441,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 62438,
                            "name": "loan",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62408,
                            "src": "33110:4:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                              "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                            }
                          },
                          "id": 62439,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "33115:25:86",
                          "memberName": "accruingInterestDailyRate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61092,
                          "src": "33110:30:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "*",
                        "rightExpression": {
                          "id": 62440,
                          "name": "accruingDays",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62422,
                          "src": "33143:12:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "33110:45:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 62442,
                        "name": "DAILY_INTEREST_DENOMINATOR",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 60976,
                        "src": "33157:26:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 62434,
                        "name": "Math",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 55080,
                        "src": "33063:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Math_$55080_$",
                          "typeString": "type(library Math)"
                        }
                      },
                      "id": 62435,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "33068:6:86",
                      "memberName": "mulDiv",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 54428,
                      "src": "33063:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 62443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "33063:130:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33037:156:86"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 62448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62445,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62408,
                        "src": "33210:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62446,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "33215:19:86",
                      "memberName": "fixedInterestAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61094,
                      "src": "33210:24:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 62447,
                      "name": "accruedInterest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62433,
                      "src": "33237:15:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "33210:42:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 62412,
                  "id": 62449,
                  "nodeType": "Return",
                  "src": "33203:49:86"
                }
              ]
            },
            "documentation": {
              "id": 62405,
              "nodeType": "StructuredDocumentation",
              "src": "32626:140:86",
              "text": " @notice Calculate the loan accrued interest.\n @param loan Loan data struct.\n @return Accrued interest amount."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_loanAccruedInterest",
            "nameLocation": "32780:20:86",
            "parameters": {
              "id": 62409,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62408,
                  "mutability": "mutable",
                  "name": "loan",
                  "nameLocation": "32814:4:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62451,
                  "src": "32801:17:86",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                    "typeString": "struct PWNSimpleLoan.LOAN"
                  },
                  "typeName": {
                    "id": 62407,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 62406,
                      "name": "LOAN",
                      "nameLocations": [
                        "32801:4:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61100,
                      "src": "32801:4:86"
                    },
                    "referencedDeclaration": 61100,
                    "src": "32801:4:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.LOAN"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "32800:19:86"
            },
            "returnParameters": {
              "id": 62412,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62411,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 62451,
                  "src": "32842:7:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62410,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "32842:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "32841:9:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 62517,
            "nodeType": "FunctionDefinition",
            "src": "33785:846:86",
            "nodes": [],
            "body": {
              "id": 62516,
              "nodeType": "Block",
              "src": "33829:802:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    62459
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62459,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "33852:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62516,
                      "src": "33839:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 62458,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62457,
                          "name": "LOAN",
                          "nameLocations": [
                            "33839:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "33839:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "33839:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62463,
                  "initialValue": {
                    "baseExpression": {
                      "id": 62460,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "33859:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 62462,
                    "indexExpression": {
                      "id": 62461,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62454,
                      "src": "33865:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "33859:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "33839:33:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 62470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 62466,
                          "name": "loanId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62454,
                          "src": "33955:6:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 62464,
                          "name": "loanToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61024,
                          "src": "33937:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_PWNLOAN_$65743",
                            "typeString": "contract PWNLOAN"
                          }
                        },
                        "id": 62465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "33947:7:86",
                        "memberName": "ownerOf",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 51449,
                        "src": "33937:17:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                          "typeString": "function (uint256) view external returns (address)"
                        }
                      },
                      "id": 62467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33937:25:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 62468,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "33966:3:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 62469,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "33970:6:86",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "33966:10:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "33937:39:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62474,
                  "nodeType": "IfStatement",
                  "src": "33933:90:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 62471,
                        "name": "CallerNotLOANTokenHolder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61203,
                        "src": "33997:24:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 62472,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "33997:26:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62473,
                    "nodeType": "RevertStatement",
                    "src": "33990:33:86"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 62478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62475,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62459,
                        "src": "34038:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62476,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "34043:6:86",
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61078,
                      "src": "34038:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 62477,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "34053:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "34038:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 62485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 62482,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62459,
                          "src": "34181:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        },
                        "id": 62483,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "34186:6:86",
                        "memberName": "status",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61078,
                        "src": "34181:11:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "33",
                        "id": 62484,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "34196:1:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      },
                      "src": "34181:16:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 62502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 62496,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 62493,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62459,
                              "src": "34346:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                              }
                            },
                            "id": 62494,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "34351:6:86",
                            "memberName": "status",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61078,
                            "src": "34346:11:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "32",
                            "id": 62495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "34361:1:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "34346:16:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 62501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 62497,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62459,
                              "src": "34366:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                              }
                            },
                            "id": 62498,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "34371:16:86",
                            "memberName": "defaultTimestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61086,
                            "src": "34366:21:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "expression": {
                              "id": 62499,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "34391:5:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 62500,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "34397:9:86",
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "34391:15:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "34366:40:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "34346:60:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 62510,
                            "name": "LoanRunning",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61189,
                            "src": "34611:11:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 62511,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34611:13:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62512,
                        "nodeType": "RevertStatement",
                        "src": "34604:20:86"
                      },
                      "id": 62513,
                      "nodeType": "IfStatement",
                      "src": "34342:282:86",
                      "trueBody": {
                        "expression": {
                          "arguments": [
                            {
                              "id": 62504,
                              "name": "loanId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62454,
                              "src": "34490:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 62505,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "34509:3:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 62506,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "34513:6:86",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "34509:10:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "hexValue": "74727565",
                              "id": 62507,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "34532:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 62503,
                            "name": "_settleLoanClaim",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62673,
                            "src": "34463:16:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (uint256,address,bool)"
                            }
                          },
                          "id": 62508,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "34482:6:86",
                            "34498:9:86",
                            "34521:9:86"
                          ],
                          "names": [
                            "loanId",
                            "loanOwner",
                            "defaulted"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "34463:76:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62509,
                        "nodeType": "ExpressionStatement",
                        "src": "34463:76:86"
                      }
                    },
                    "id": 62514,
                    "nodeType": "IfStatement",
                    "src": "34177:447:86",
                    "trueBody": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 62487,
                            "name": "loanId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62454,
                            "src": "34277:6:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "expression": {
                              "id": 62488,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "34296:3:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 62489,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "34300:6:86",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "34296:10:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "hexValue": "66616c7365",
                            "id": 62490,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "34319:5:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          ],
                          "id": 62486,
                          "name": "_settleLoanClaim",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62673,
                          "src": "34250:16:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_bool_$returns$__$",
                            "typeString": "function (uint256,address,bool)"
                          }
                        },
                        "id": 62491,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "34269:6:86",
                          "34285:9:86",
                          "34308:9:86"
                        ],
                        "names": [
                          "loanId",
                          "loanOwner",
                          "defaulted"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "34250:77:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 62492,
                      "nodeType": "ExpressionStatement",
                      "src": "34250:77:86"
                    }
                  },
                  "id": 62515,
                  "nodeType": "IfStatement",
                  "src": "34034:590:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 62479,
                        "name": "NonExistingLoan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61200,
                        "src": "34145:15:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 62480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "34145:17:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62481,
                    "nodeType": "RevertStatement",
                    "src": "34138:24:86"
                  }
                }
              ]
            },
            "documentation": {
              "id": 62452,
              "nodeType": "StructuredDocumentation",
              "src": "33468:312:86",
              "text": " @notice Claim a repaid or defaulted loan.\n @dev Only a LOAN token holder can claim a repaid or defaulted loan.\n      Claim will transfer the repaid credit or collateral to a LOAN token holder address and burn the LOAN token.\n @param loanId Id of a loan that is being claimed."
            },
            "functionSelector": "0ee1ba17",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "claimLOAN",
            "nameLocation": "33794:9:86",
            "parameters": {
              "id": 62455,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62454,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "33812:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62517,
                  "src": "33804:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62453,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "33804:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "33803:16:86"
            },
            "returnParameters": {
              "id": 62456,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "33829:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 62624,
            "nodeType": "FunctionDefinition",
            "src": "35295:1907:86",
            "nodes": [],
            "body": {
              "id": 62623,
              "nodeType": "Block",
              "src": "35389:1813:86",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 62533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62527,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "35403:3:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 62528,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "35407:6:86",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "35403:10:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 62531,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "35425:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_PWNSimpleLoan_$63281",
                            "typeString": "contract PWNSimpleLoan"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_PWNSimpleLoan_$63281",
                            "typeString": "contract PWNSimpleLoan"
                          }
                        ],
                        "id": 62530,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "35417:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 62529,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "35417:7:86",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 62532,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "35417:13:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "35403:27:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62537,
                  "nodeType": "IfStatement",
                  "src": "35399:68:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 62534,
                        "name": "CallerNotVault",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61240,
                        "src": "35451:14:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 62535,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "35451:16:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62536,
                    "nodeType": "RevertStatement",
                    "src": "35444:23:86"
                  }
                },
                {
                  "assignments": [
                    62540
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62540,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "35491:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62623,
                      "src": "35478:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 62539,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62538,
                          "name": "LOAN",
                          "nameLocations": [
                            "35478:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "35478:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "35478:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62544,
                  "initialValue": {
                    "baseExpression": {
                      "id": 62541,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "35498:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 62543,
                    "indexExpression": {
                      "id": 62542,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62520,
                      "src": "35504:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "35498:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "35478:33:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 62548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62545,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62540,
                        "src": "35526:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62546,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "35531:6:86",
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61078,
                      "src": "35526:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "33",
                      "id": 62547,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "35541:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "src": "35526:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62550,
                  "nodeType": "IfStatement",
                  "src": "35522:41:86",
                  "trueBody": {
                    "functionReturnParameters": 62526,
                    "id": 62549,
                    "nodeType": "Return",
                    "src": "35556:7:86"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 62554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62551,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62540,
                        "src": "35693:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62552,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "35698:14:86",
                      "memberName": "originalLender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61090,
                      "src": "35693:19:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 62553,
                      "name": "loanOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62524,
                      "src": "35716:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "35693:32:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62556,
                  "nodeType": "IfStatement",
                  "src": "35689:57:86",
                  "trueBody": {
                    "functionReturnParameters": 62526,
                    "id": 62555,
                    "nodeType": "Return",
                    "src": "35739:7:86"
                  }
                },
                {
                  "assignments": [
                    62558
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62558,
                      "mutability": "mutable",
                      "name": "destinationOfFunds",
                      "nameLocation": "35835:18:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62623,
                      "src": "35827:26:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 62557,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "35827:7:86",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62561,
                  "initialValue": {
                    "expression": {
                      "id": 62559,
                      "name": "loan",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62540,
                      "src": "35856:4:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                      }
                    },
                    "id": 62560,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "35861:21:86",
                    "memberName": "originalSourceOfFunds",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 61082,
                    "src": "35856:26:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "35827:55:86"
                },
                {
                  "assignments": [
                    62566
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62566,
                      "mutability": "mutable",
                      "name": "repaymentCredit",
                      "nameLocation": "35916:15:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62623,
                      "src": "35892:39:86",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                        "typeString": "struct MultiToken.Asset"
                      },
                      "typeName": {
                        "id": 62565,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62564,
                          "name": "MultiToken.Asset",
                          "nameLocations": [
                            "35892:10:86",
                            "35903:5:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 60,
                          "src": "35892:16:86"
                        },
                        "referencedDeclaration": 60,
                        "src": "35892:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                          "typeString": "struct MultiToken.Asset"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62572,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 62570,
                        "name": "creditAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62522,
                        "src": "35959:12:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "expression": {
                          "id": 62567,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62540,
                          "src": "35934:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        },
                        "id": 62568,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "35939:13:86",
                        "memberName": "creditAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61080,
                        "src": "35934:18:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 62569,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "35953:5:86",
                      "memberName": "ERC20",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 85,
                      "src": "35934:24:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_struct$_Asset_$60_memory_ptr_$bound_to$_t_address_$",
                        "typeString": "function (address,uint256) pure returns (struct MultiToken.Asset memory)"
                      }
                    },
                    "id": 62571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35934:38:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                      "typeString": "struct MultiToken.Asset memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "35892:80:86"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 62574,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62520,
                        "src": "36070:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 62573,
                      "name": "_deleteLoan",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62691,
                      "src": "36058:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 62575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36058:19:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62576,
                  "nodeType": "ExpressionStatement",
                  "src": "36058:19:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 62579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 62577,
                      "name": "destinationOfFunds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62558,
                      "src": "36129:18:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 62578,
                      "name": "loanOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62524,
                      "src": "36151:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "36129:31:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 62616,
                    "nodeType": "Block",
                    "src": "36226:658:86",
                    "statements": [
                      {
                        "assignments": [
                          62588
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 62588,
                            "mutability": "mutable",
                            "name": "poolAdapter",
                            "nameLocation": "36253:11:86",
                            "nodeType": "VariableDeclaration",
                            "scope": 62616,
                            "src": "36240:24:86",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                              "typeString": "contract IPoolAdapter"
                            },
                            "typeName": {
                              "id": 62587,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 62586,
                                "name": "IPoolAdapter",
                                "nameLocations": [
                                  "36240:12:86"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 60696,
                                "src": "36240:12:86"
                              },
                              "referencedDeclaration": 60696,
                              "src": "36240:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                                "typeString": "contract IPoolAdapter"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 62593,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 62591,
                              "name": "destinationOfFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62558,
                              "src": "36289:18:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 62589,
                              "name": "config",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61027,
                              "src": "36267:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_PWNConfig_$60390",
                                "typeString": "contract PWNConfig"
                              }
                            },
                            "id": 62590,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "36274:14:86",
                            "memberName": "getPoolAdapter",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 60372,
                            "src": "36267:21:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_contract$_IPoolAdapter_$60696_$",
                              "typeString": "function (address) view external returns (contract IPoolAdapter)"
                            }
                          },
                          "id": 62592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "36267:41:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                            "typeString": "contract IPoolAdapter"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "36240:68:86"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 62602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 62596,
                                "name": "poolAdapter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62588,
                                "src": "36388:11:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                                  "typeString": "contract IPoolAdapter"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                                  "typeString": "contract IPoolAdapter"
                                }
                              ],
                              "id": 62595,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "36380:7:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 62594,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "36380:7:86",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 62597,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "36380:20:86",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 62600,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "36412:1:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 62599,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "36404:7:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 62598,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "36404:7:86",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 62601,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "36404:10:86",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "36380:34:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 62608,
                        "nodeType": "IfStatement",
                        "src": "36376:348:86",
                        "trueBody": {
                          "id": 62607,
                          "nodeType": "Block",
                          "src": "36416:308:86",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 62604,
                                    "name": "destinationOfFunds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 62558,
                                    "src": "36688:18:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 62603,
                                  "name": "InvalidSourceOfFunds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 61245,
                                  "src": "36650:20:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                                    "typeString": "function (address) pure"
                                  }
                                },
                                "id": 62605,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [
                                  "36673:13:86"
                                ],
                                "names": [
                                  "sourceOfFunds"
                                ],
                                "nodeType": "FunctionCall",
                                "src": "36650:59:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 62606,
                              "nodeType": "RevertStatement",
                              "src": "36643:66:86"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 62610,
                              "name": "repaymentCredit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62566,
                              "src": "36813:15:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            {
                              "id": 62611,
                              "name": "poolAdapter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62588,
                              "src": "36830:11:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                                "typeString": "contract IPoolAdapter"
                              }
                            },
                            {
                              "id": 62612,
                              "name": "destinationOfFunds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62558,
                              "src": "36843:18:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 62613,
                              "name": "loanOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62524,
                              "src": "36863:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              },
                              {
                                "typeIdentifier": "t_contract$_IPoolAdapter_$60696",
                                "typeString": "contract IPoolAdapter"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 62609,
                            "name": "_supplyToPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 66065,
                            "src": "36799:13:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_contract$_IPoolAdapter_$60696_$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory,contract IPoolAdapter,address,address)"
                            }
                          },
                          "id": 62614,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "36799:74:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62615,
                        "nodeType": "ExpressionStatement",
                        "src": "36799:74:86"
                      }
                    ]
                  },
                  "id": 62617,
                  "nodeType": "IfStatement",
                  "src": "36125:759:86",
                  "trueBody": {
                    "id": 62585,
                    "nodeType": "Block",
                    "src": "36162:58:86",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 62581,
                              "name": "repaymentCredit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62566,
                              "src": "36182:15:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            {
                              "id": 62582,
                              "name": "loanOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62524,
                              "src": "36199:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 62580,
                            "name": "_push",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 65907,
                            "src": "36176:5:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory,address)"
                            }
                          },
                          "id": 62583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "36176:33:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62584,
                        "nodeType": "ExpressionStatement",
                        "src": "36176:33:86"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 62619,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62520,
                        "src": "37168:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 62620,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "37187:5:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 62618,
                      "name": "LOANClaimed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61164,
                      "src": "37146:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (uint256,bool)"
                      }
                    },
                    "id": 62621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "37160:6:86",
                      "37176:9:86"
                    ],
                    "names": [
                      "loanId",
                      "defaulted"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "37146:49:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62622,
                  "nodeType": "EmitStatement",
                  "src": "37141:54:86"
                }
              ]
            },
            "documentation": {
              "id": 62518,
              "nodeType": "StructuredDocumentation",
              "src": "34637:653:86",
              "text": " @notice Try to claim a repaid loan for the loan owner.\n @dev The function is called by the vault to repay a loan directly to the original lender or its source of funds\n      if the loan owner is the original lender. If the transfer fails, the LOAN token will remain in repaid state\n      and the LOAN token owner will be able to claim the repaid credit. Otherwise lender would be able to prevent\n      borrower from repaying the loan.\n @param loanId Id of a loan that is being claimed.\n @param creditAmount Amount of a credit to be claimed.\n @param loanOwner Address of the LOAN token holder."
            },
            "functionSelector": "94aedc2f",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tryClaimRepaidLOAN",
            "nameLocation": "35304:18:86",
            "parameters": {
              "id": 62525,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62520,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "35331:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62624,
                  "src": "35323:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62519,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35323:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 62522,
                  "mutability": "mutable",
                  "name": "creditAmount",
                  "nameLocation": "35347:12:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62624,
                  "src": "35339:20:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62521,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "35339:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 62524,
                  "mutability": "mutable",
                  "name": "loanOwner",
                  "nameLocation": "35369:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62624,
                  "src": "35361:17:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 62523,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "35361:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "35322:57:86"
            },
            "returnParameters": {
              "id": 62526,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "35389:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 62673,
            "nodeType": "FunctionDefinition",
            "src": "37427:600:86",
            "nodes": [],
            "body": {
              "id": 62672,
              "nodeType": "Block",
              "src": "37512:515:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    62636
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62636,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "37535:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62672,
                      "src": "37522:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 62635,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62634,
                          "name": "LOAN",
                          "nameLocations": [
                            "37522:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "37522:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "37522:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62640,
                  "initialValue": {
                    "baseExpression": {
                      "id": 62637,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "37542:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 62639,
                    "indexExpression": {
                      "id": 62638,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62627,
                      "src": "37548:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "37542:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "37522:33:86"
                },
                {
                  "assignments": [
                    62645
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62645,
                      "mutability": "mutable",
                      "name": "asset",
                      "nameLocation": "37642:5:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62672,
                      "src": "37618:29:86",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                        "typeString": "struct MultiToken.Asset"
                      },
                      "typeName": {
                        "id": 62644,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62643,
                          "name": "MultiToken.Asset",
                          "nameLocations": [
                            "37618:10:86",
                            "37629:5:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 60,
                          "src": "37618:16:86"
                        },
                        "referencedDeclaration": 60,
                        "src": "37618:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                          "typeString": "struct MultiToken.Asset"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62657,
                  "initialValue": {
                    "condition": {
                      "id": 62646,
                      "name": "defaulted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62631,
                      "src": "37650:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 62653,
                              "name": "loanId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62627,
                              "src": "37750:6:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 62652,
                            "name": "_loanRepaymentAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62404,
                            "src": "37729:20:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256) view returns (uint256)"
                            }
                          },
                          "id": 62654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "37729:28:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "expression": {
                            "id": 62649,
                            "name": "loan",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62636,
                            "src": "37704:4:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                              "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                            }
                          },
                          "id": 62650,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "37709:13:86",
                          "memberName": "creditAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61080,
                          "src": "37704:18:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 62651,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "37723:5:86",
                        "memberName": "ERC20",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 85,
                        "src": "37704:24:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_struct$_Asset_$60_memory_ptr_$bound_to$_t_address_$",
                          "typeString": "function (address,uint256) pure returns (struct MultiToken.Asset memory)"
                        }
                      },
                      "id": 62655,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "37704:54:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                        "typeString": "struct MultiToken.Asset memory"
                      }
                    },
                    "id": 62656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "37650:108:86",
                    "trueExpression": {
                      "expression": {
                        "id": 62647,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62636,
                        "src": "37674:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62648,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "37679:10:86",
                      "memberName": "collateral",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61099,
                      "src": "37674:15:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_storage",
                        "typeString": "struct MultiToken.Asset storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                      "typeString": "struct MultiToken.Asset memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "37618:140:86"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 62659,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62627,
                        "src": "37856:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 62658,
                      "name": "_deleteLoan",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62691,
                      "src": "37844:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 62660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37844:19:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62661,
                  "nodeType": "ExpressionStatement",
                  "src": "37844:19:86"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 62663,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62627,
                        "src": "37901:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 62664,
                        "name": "defaulted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62631,
                        "src": "37920:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 62662,
                      "name": "LOANClaimed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61164,
                      "src": "37879:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (uint256,bool)"
                      }
                    },
                    "id": 62665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "37893:6:86",
                      "37909:9:86"
                    ],
                    "names": [
                      "loanId",
                      "defaulted"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "37879:53:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62666,
                  "nodeType": "EmitStatement",
                  "src": "37874:58:86"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 62668,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62645,
                        "src": "38003:5:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        }
                      },
                      {
                        "id": 62669,
                        "name": "loanOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62629,
                        "src": "38010:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 62667,
                      "name": "_push",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 65907,
                      "src": "37997:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (struct MultiToken.Asset memory,address)"
                      }
                    },
                    "id": 62670,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37997:23:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62671,
                  "nodeType": "ExpressionStatement",
                  "src": "37997:23:86"
                }
              ]
            },
            "documentation": {
              "id": 62625,
              "nodeType": "StructuredDocumentation",
              "src": "37208:214:86",
              "text": " @notice Settle the loan claim.\n @param loanId Id of a loan that is being claimed.\n @param loanOwner Address of the LOAN token holder.\n @param defaulted If the loan is defaulted."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_settleLoanClaim",
            "nameLocation": "37436:16:86",
            "parameters": {
              "id": 62632,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62627,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "37461:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62673,
                  "src": "37453:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62626,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "37453:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 62629,
                  "mutability": "mutable",
                  "name": "loanOwner",
                  "nameLocation": "37477:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62673,
                  "src": "37469:17:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 62628,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "37469:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 62631,
                  "mutability": "mutable",
                  "name": "defaulted",
                  "nameLocation": "37493:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62673,
                  "src": "37488:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 62630,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "37488:4:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37452:51:86"
            },
            "returnParameters": {
              "id": 62633,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "37512:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 62691,
            "nodeType": "FunctionDefinition",
            "src": "38159:114:86",
            "nodes": [],
            "body": {
              "id": 62690,
              "nodeType": "Block",
              "src": "38204:69:86",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 62682,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62676,
                        "src": "38229:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 62679,
                        "name": "loanToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61024,
                        "src": "38214:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PWNLOAN_$65743",
                          "typeString": "contract PWNLOAN"
                        }
                      },
                      "id": 62681,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "38224:4:86",
                      "memberName": "burn",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 65663,
                      "src": "38214:14:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 62683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "38214:22:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62684,
                  "nodeType": "ExpressionStatement",
                  "src": "38214:22:86"
                },
                {
                  "expression": {
                    "id": 62688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "delete",
                    "prefix": true,
                    "src": "38246:20:86",
                    "subExpression": {
                      "baseExpression": {
                        "id": 62685,
                        "name": "LOANs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61106,
                        "src": "38253:5:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                          "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                        }
                      },
                      "id": 62687,
                      "indexExpression": {
                        "id": 62686,
                        "name": "loanId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62676,
                        "src": "38259:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "38253:13:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                        "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62689,
                  "nodeType": "ExpressionStatement",
                  "src": "38246:20:86"
                }
              ]
            },
            "documentation": {
              "id": 62674,
              "nodeType": "StructuredDocumentation",
              "src": "38033:121:86",
              "text": " @notice Delete loan data and burn LOAN token.\n @param loanId Id of a loan that is being deleted."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_deleteLoan",
            "nameLocation": "38168:11:86",
            "parameters": {
              "id": 62677,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62676,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "38188:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62691,
                  "src": "38180:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 62675,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "38180:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "38179:16:86"
            },
            "returnParameters": {
              "id": 62678,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "38204:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 62731,
            "nodeType": "FunctionDefinition",
            "src": "38601:513:86",
            "nodes": [],
            "body": {
              "id": 62730,
              "nodeType": "Block",
              "src": "38679:435:86",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 62702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62698,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "38736:3:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 62699,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "38740:6:86",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "38736:10:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 62700,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62695,
                        "src": "38750:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                        }
                      },
                      "id": 62701,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "38760:8:86",
                      "memberName": "proposer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61118,
                      "src": "38750:18:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "38736:32:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62710,
                  "nodeType": "IfStatement",
                  "src": "38732:133:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 62704,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62695,
                            "src": "38823:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                            }
                          },
                          "id": 62705,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "38833:8:86",
                          "memberName": "proposer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61118,
                          "src": "38823:18:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "expression": {
                            "id": 62706,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "38852:3:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 62707,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "38856:6:86",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "38852:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 62703,
                        "name": "InvalidExtensionSigner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61255,
                        "src": "38789:22:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$__$",
                          "typeString": "function (address,address) pure"
                        }
                      },
                      "id": 62708,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [
                        "38814:7:86",
                        "38843:7:86"
                      ],
                      "names": [
                        "allowed",
                        "current"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "38789:76:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62709,
                    "nodeType": "RevertStatement",
                    "src": "38782:83:86"
                  }
                },
                {
                  "assignments": [
                    62712
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62712,
                      "mutability": "mutable",
                      "name": "extensionHash",
                      "nameLocation": "38927:13:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 62730,
                      "src": "38919:21:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 62711,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "38919:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62716,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 62714,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62695,
                        "src": "38960:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                        }
                      ],
                      "id": 62713,
                      "name": "getExtensionHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63029,
                      "src": "38943:16:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_ExtensionProposal_$61123_calldata_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (struct PWNSimpleLoan.ExtensionProposal calldata) view returns (bytes32)"
                      }
                    },
                    "id": 62715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "38943:27:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "38919:51:86"
                },
                {
                  "expression": {
                    "id": 62721,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 62717,
                        "name": "extensionProposalsMade",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61128,
                        "src": "38980:22:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                          "typeString": "mapping(bytes32 => bool)"
                        }
                      },
                      "id": 62719,
                      "indexExpression": {
                        "id": 62718,
                        "name": "extensionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62712,
                        "src": "39003:13:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "38980:37:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 62720,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "39020:4:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "38980:44:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62722,
                  "nodeType": "ExpressionStatement",
                  "src": "38980:44:86"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 62724,
                        "name": "extensionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62712,
                        "src": "39062:13:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 62725,
                          "name": "extension",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62695,
                          "src": "39077:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                          }
                        },
                        "id": 62726,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "39087:8:86",
                        "memberName": "proposer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61118,
                        "src": "39077:18:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 62727,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62695,
                        "src": "39097:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                        }
                      ],
                      "id": 62723,
                      "name": "ExtensionProposalMade",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61183,
                      "src": "39040:21:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_struct$_ExtensionProposal_$61123_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,address,struct PWNSimpleLoan.ExtensionProposal memory)"
                      }
                    },
                    "id": 62728,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39040:67:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62729,
                  "nodeType": "EmitStatement",
                  "src": "39035:72:86"
                }
              ]
            },
            "documentation": {
              "id": 62692,
              "nodeType": "StructuredDocumentation",
              "src": "38482:114:86",
              "text": " @notice Make an on-chain extension proposal.\n @param extension Extension proposal struct."
            },
            "functionSelector": "376af4d1",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "makeExtensionProposal",
            "nameLocation": "38610:21:86",
            "parameters": {
              "id": 62696,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62695,
                  "mutability": "mutable",
                  "name": "extension",
                  "nameLocation": "38659:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 62731,
                  "src": "38632:36:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                    "typeString": "struct PWNSimpleLoan.ExtensionProposal"
                  },
                  "typeName": {
                    "id": 62694,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 62693,
                      "name": "ExtensionProposal",
                      "nameLocations": [
                        "38632:17:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61123,
                      "src": "38632:17:86"
                    },
                    "referencedDeclaration": 61123,
                    "src": "38632:17:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExtensionProposal_$61123_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.ExtensionProposal"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "38631:38:86"
            },
            "returnParameters": {
              "id": 62697,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "38679:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 63001,
            "nodeType": "FunctionDefinition",
            "src": "39511:3933:86",
            "nodes": [],
            "body": {
              "id": 63000,
              "nodeType": "Block",
              "src": "39661:3783:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    62744
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62744,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "39684:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 63000,
                      "src": "39671:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 62743,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 62742,
                          "name": "LOAN",
                          "nameLocations": [
                            "39671:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "39671:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "39671:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62749,
                  "initialValue": {
                    "baseExpression": {
                      "id": 62745,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "39691:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 62748,
                    "indexExpression": {
                      "expression": {
                        "id": 62746,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62735,
                        "src": "39697:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                        }
                      },
                      "id": 62747,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "39707:6:86",
                      "memberName": "loanId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61108,
                      "src": "39697:16:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "39691:23:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "39671:43:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 62753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62750,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62744,
                        "src": "39778:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62751,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "39783:6:86",
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61078,
                      "src": "39778:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 62752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "39793:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "39778:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62757,
                  "nodeType": "IfStatement",
                  "src": "39774:58:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 62754,
                        "name": "NonExistingLoan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61200,
                        "src": "39815:15:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 62755,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "39815:17:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62756,
                    "nodeType": "RevertStatement",
                    "src": "39808:24:86"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 62761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62758,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62744,
                        "src": "39846:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62759,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "39851:6:86",
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61078,
                      "src": "39846:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "33",
                      "id": 62760,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "39861:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3_by_1",
                        "typeString": "int_const 3"
                      },
                      "value": "3"
                    },
                    "src": "39846:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62765,
                  "nodeType": "IfStatement",
                  "src": "39842:82:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 62762,
                        "name": "LoanRepaid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61192,
                        "src": "39912:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 62763,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "39912:12:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62764,
                    "nodeType": "RevertStatement",
                    "src": "39905:19:86"
                  }
                },
                {
                  "assignments": [
                    62767
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62767,
                      "mutability": "mutable",
                      "name": "extensionHash",
                      "nameLocation": "39979:13:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 63000,
                      "src": "39971:21:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 62766,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "39971:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62771,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 62769,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62735,
                        "src": "40012:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                        }
                      ],
                      "id": 62768,
                      "name": "getExtensionHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63029,
                      "src": "39995:16:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_ExtensionProposal_$61123_calldata_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (struct PWNSimpleLoan.ExtensionProposal calldata) view returns (bytes32)"
                      }
                    },
                    "id": 62770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39995:27:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "39971:51:86"
                },
                {
                  "condition": {
                    "id": 62775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "40036:38:86",
                    "subExpression": {
                      "baseExpression": {
                        "id": 62772,
                        "name": "extensionProposalsMade",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61128,
                        "src": "40037:22:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                          "typeString": "mapping(bytes32 => bool)"
                        }
                      },
                      "id": 62774,
                      "indexExpression": {
                        "id": 62773,
                        "name": "extensionHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62767,
                        "src": "40060:13:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "40037:37:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62793,
                  "nodeType": "IfStatement",
                  "src": "40032:262:86",
                  "trueBody": {
                    "condition": {
                      "id": 62783,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "40092:86:86",
                      "subExpression": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 62778,
                              "name": "extension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62735,
                              "src": "40133:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                              }
                            },
                            "id": 62779,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "40143:8:86",
                            "memberName": "proposer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61118,
                            "src": "40133:18:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 62780,
                            "name": "extensionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62767,
                            "src": "40153:13:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 62781,
                            "name": "signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62737,
                            "src": "40168:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "id": 62776,
                            "name": "PWNSignatureChecker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 60911,
                            "src": "40093:19:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_PWNSignatureChecker_$60911_$",
                              "typeString": "type(library PWNSignatureChecker)"
                            }
                          },
                          "id": 62777,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40113:19:86",
                          "memberName": "isValidSignatureNow",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 60910,
                          "src": "40093:39:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (address,bytes32,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 62782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "40093:85:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 62792,
                    "nodeType": "IfStatement",
                    "src": "40088:206:86",
                    "trueBody": {
                      "errorCall": {
                        "arguments": [
                          {
                            "expression": {
                              "id": 62787,
                              "name": "extension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62735,
                              "src": "40250:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                              }
                            },
                            "id": 62788,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "40260:8:86",
                            "memberName": "proposer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61118,
                            "src": "40250:18:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 62789,
                            "name": "extensionHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62767,
                            "src": "40278:13:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 62784,
                            "name": "PWNSignatureChecker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 60911,
                            "src": "40203:19:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_PWNSignatureChecker_$60911_$",
                              "typeString": "type(library PWNSignatureChecker)"
                            }
                          },
                          "id": 62786,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40223:16:86",
                          "memberName": "InvalidSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 60785,
                          "src": "40203:36:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_error_pure$_t_address_$_t_bytes32_$returns$__$",
                            "typeString": "function (address,bytes32) pure"
                          }
                        },
                        "id": 62790,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [
                          "40242:6:86",
                          "40270:6:86"
                        ],
                        "names": [
                          "signer",
                          "digest"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "40203:91:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 62791,
                      "nodeType": "RevertStatement",
                      "src": "40196:98:86"
                    }
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 62798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62794,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "40347:5:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 62795,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "40353:9:86",
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "40347:15:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "expression": {
                        "id": 62796,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62735,
                        "src": "40366:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                        }
                      },
                      "id": 62797,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "40376:10:86",
                      "memberName": "expiration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61116,
                      "src": "40366:20:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "40347:39:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62806,
                  "nodeType": "IfStatement",
                  "src": "40343:135:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 62800,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "40426:5:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 62801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40432:9:86",
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "40426:15:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 62802,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62735,
                            "src": "40455:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                            }
                          },
                          "id": 62803,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40465:10:86",
                          "memberName": "expiration",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61116,
                          "src": "40455:20:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        ],
                        "id": 62799,
                        "name": "Expired",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 59984,
                        "src": "40407:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$",
                          "typeString": "function (uint256,uint256) pure"
                        }
                      },
                      "id": 62804,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [
                        "40417:7:86",
                        "40443:10:86"
                      ],
                      "names": [
                        "current",
                        "expiration"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "40407:71:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62805,
                    "nodeType": "RevertStatement",
                    "src": "40400:78:86"
                  }
                },
                {
                  "condition": {
                    "id": 62816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "40526:86:86",
                    "subExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 62809,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62735,
                            "src": "40554:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                            }
                          },
                          "id": 62810,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40564:8:86",
                          "memberName": "proposer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61118,
                          "src": "40554:18:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "expression": {
                            "id": 62811,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62735,
                            "src": "40574:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                            }
                          },
                          "id": 62812,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40584:10:86",
                          "memberName": "nonceSpace",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61120,
                          "src": "40574:20:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 62813,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62735,
                            "src": "40596:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                            }
                          },
                          "id": 62814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40606:5:86",
                          "memberName": "nonce",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61122,
                          "src": "40596:15:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 62807,
                          "name": "revokedNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 61030,
                          "src": "40527:12:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_PWNRevokedNonce_$66596",
                            "typeString": "contract PWNRevokedNonce"
                          }
                        },
                        "id": 62808,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "40540:13:86",
                        "memberName": "isNonceUsable",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 66560,
                        "src": "40527:26:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (address,uint256,uint256) view external returns (bool)"
                        }
                      },
                      "id": 62815,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "40527:85:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62828,
                  "nodeType": "IfStatement",
                  "src": "40522:289:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 62820,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62735,
                            "src": "40688:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                            }
                          },
                          "id": 62821,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40698:8:86",
                          "memberName": "proposer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61118,
                          "src": "40688:18:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "expression": {
                            "id": 62822,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62735,
                            "src": "40736:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                            }
                          },
                          "id": 62823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40746:10:86",
                          "memberName": "nonceSpace",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61120,
                          "src": "40736:20:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 62824,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62735,
                            "src": "40781:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                            }
                          },
                          "id": 62825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40791:5:86",
                          "memberName": "nonce",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61122,
                          "src": "40781:15:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 62817,
                          "name": "PWNRevokedNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 66596,
                          "src": "40633:15:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_PWNRevokedNonce_$66596_$",
                            "typeString": "type(contract PWNRevokedNonce)"
                          }
                        },
                        "id": 62819,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "40649:14:86",
                        "memberName": "NonceNotUsable",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 66360,
                        "src": "40633:30:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                          "typeString": "function (address,uint256,uint256) pure"
                        }
                      },
                      "id": 62826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [
                        "40682:4:86",
                        "40724:10:86",
                        "40774:5:86"
                      ],
                      "names": [
                        "addr",
                        "nonceSpace",
                        "nonce"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "40633:178:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62827,
                    "nodeType": "RevertStatement",
                    "src": "40626:185:86"
                  }
                },
                {
                  "assignments": [
                    62830
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62830,
                      "mutability": "mutable",
                      "name": "loanOwner",
                      "nameLocation": "40865:9:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 63000,
                      "src": "40857:17:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 62829,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "40857:7:86",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62836,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 62833,
                          "name": "extension",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62735,
                          "src": "40895:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                          }
                        },
                        "id": 62834,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "40905:6:86",
                        "memberName": "loanId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61108,
                        "src": "40895:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 62831,
                        "name": "loanToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61024,
                        "src": "40877:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PWNLOAN_$65743",
                          "typeString": "contract PWNLOAN"
                        }
                      },
                      "id": 62832,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "40887:7:86",
                      "memberName": "ownerOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 51449,
                      "src": "40877:17:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view external returns (address)"
                      }
                    },
                    "id": 62835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "40877:35:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "40857:55:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 62840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62837,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "40926:3:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 62838,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "40930:6:86",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "40926:10:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 62839,
                      "name": "loanOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62830,
                      "src": "40940:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "40926:23:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 62860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 62856,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "41271:3:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 62857,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "41275:6:86",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "41271:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "id": 62858,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62744,
                          "src": "41285:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        },
                        "id": 62859,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "41290:8:86",
                        "memberName": "borrower",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61088,
                        "src": "41285:13:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "41271:27:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 62877,
                      "nodeType": "Block",
                      "src": "41608:109:86",
                      "statements": [
                        {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 62874,
                              "name": "InvalidExtensionCaller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 61248,
                              "src": "41682:22:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                "typeString": "function () pure"
                              }
                            },
                            "id": 62875,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "41682:24:86",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 62876,
                          "nodeType": "RevertStatement",
                          "src": "41675:31:86"
                        }
                      ]
                    },
                    "id": 62878,
                    "nodeType": "IfStatement",
                    "src": "41267:450:86",
                    "trueBody": {
                      "id": 62873,
                      "nodeType": "Block",
                      "src": "41300:302:86",
                      "statements": [
                        {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 62864,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 62861,
                                "name": "extension",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62735,
                                "src": "41318:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                                }
                              },
                              "id": 62862,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "41328:8:86",
                              "memberName": "proposer",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61118,
                              "src": "41318:18:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 62863,
                              "name": "loanOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62830,
                              "src": "41340:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "41318:31:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 62872,
                          "nodeType": "IfStatement",
                          "src": "41314:278:86",
                          "trueBody": {
                            "id": 62871,
                            "nodeType": "Block",
                            "src": "41351:241:86",
                            "statements": [
                              {
                                "errorCall": {
                                  "arguments": [
                                    {
                                      "id": 62866,
                                      "name": "loanOwner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 62830,
                                      "src": "41500:9:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 62867,
                                        "name": "extension",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 62735,
                                        "src": "41540:9:86",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                                        }
                                      },
                                      "id": 62868,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "41550:8:86",
                                      "memberName": "proposer",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 61118,
                                      "src": "41540:18:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 62865,
                                    "name": "InvalidExtensionSigner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 61255,
                                    "src": "41446:22:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$__$",
                                      "typeString": "function (address,address) pure"
                                    }
                                  },
                                  "id": 62869,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [
                                    "41491:7:86",
                                    "41531:7:86"
                                  ],
                                  "names": [
                                    "allowed",
                                    "current"
                                  ],
                                  "nodeType": "FunctionCall",
                                  "src": "41446:131:86",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$__$",
                                    "typeString": "tuple()"
                                  }
                                },
                                "id": 62870,
                                "nodeType": "RevertStatement",
                                "src": "41439:138:86"
                              }
                            ]
                          }
                        }
                      ]
                    }
                  },
                  "id": 62879,
                  "nodeType": "IfStatement",
                  "src": "40922:795:86",
                  "trueBody": {
                    "id": 62855,
                    "nodeType": "Block",
                    "src": "40951:310:86",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 62845,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 62841,
                              "name": "extension",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62735,
                              "src": "40969:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                                "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                              }
                            },
                            "id": 62842,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "40979:8:86",
                            "memberName": "proposer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61118,
                            "src": "40969:18:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "id": 62843,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62744,
                              "src": "40991:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                              }
                            },
                            "id": 62844,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "40996:8:86",
                            "memberName": "borrower",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61088,
                            "src": "40991:13:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "40969:35:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 62854,
                        "nodeType": "IfStatement",
                        "src": "40965:286:86",
                        "trueBody": {
                          "id": 62853,
                          "nodeType": "Block",
                          "src": "41006:245:86",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 62847,
                                      "name": "loan",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 62744,
                                      "src": "41155:4:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                        "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                      }
                                    },
                                    "id": 62848,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "41160:8:86",
                                    "memberName": "borrower",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 61088,
                                    "src": "41155:13:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 62849,
                                      "name": "extension",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 62735,
                                      "src": "41199:9:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                                        "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                                      }
                                    },
                                    "id": 62850,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "41209:8:86",
                                    "memberName": "proposer",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 61118,
                                    "src": "41199:18:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 62846,
                                  "name": "InvalidExtensionSigner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 61255,
                                  "src": "41101:22:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$__$",
                                    "typeString": "function (address,address) pure"
                                  }
                                },
                                "id": 62851,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [
                                  "41146:7:86",
                                  "41190:7:86"
                                ],
                                "names": [
                                  "allowed",
                                  "current"
                                ],
                                "nodeType": "FunctionCall",
                                "src": "41101:135:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 62852,
                              "nodeType": "RevertStatement",
                              "src": "41094:142:86"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 62883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62880,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62735,
                        "src": "41763:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                        }
                      },
                      "id": 62881,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "41773:8:86",
                      "memberName": "duration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61114,
                      "src": "41763:18:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 62882,
                      "name": "MIN_EXTENSION_DURATION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60988,
                      "src": "41784:22:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "41763:43:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62890,
                  "nodeType": "IfStatement",
                  "src": "41759:201:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 62885,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62735,
                            "src": "41880:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                            }
                          },
                          "id": 62886,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "41890:8:86",
                          "memberName": "duration",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61114,
                          "src": "41880:18:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        {
                          "id": 62887,
                          "name": "MIN_EXTENSION_DURATION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60988,
                          "src": "41923:22:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 62884,
                        "name": "InvalidExtensionDuration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61262,
                        "src": "41827:24:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$",
                          "typeString": "function (uint256,uint256) pure"
                        }
                      },
                      "id": 62888,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [
                        "41870:8:86",
                        "41916:5:86"
                      ],
                      "names": [
                        "duration",
                        "limit"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "41827:133:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62889,
                    "nodeType": "RevertStatement",
                    "src": "41820:140:86"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 62894,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 62891,
                        "name": "extension",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62735,
                        "src": "41974:9:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                        }
                      },
                      "id": 62892,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "41984:8:86",
                      "memberName": "duration",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61114,
                      "src": "41974:18:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 62893,
                      "name": "MAX_EXTENSION_DURATION",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 60985,
                      "src": "41995:22:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "41974:43:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62901,
                  "nodeType": "IfStatement",
                  "src": "41970:201:86",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 62896,
                            "name": "extension",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 62735,
                            "src": "42091:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                              "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                            }
                          },
                          "id": 62897,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "42101:8:86",
                          "memberName": "duration",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61114,
                          "src": "42091:18:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        {
                          "id": 62898,
                          "name": "MAX_EXTENSION_DURATION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 60985,
                          "src": "42134:22:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 62895,
                        "name": "InvalidExtensionDuration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61262,
                        "src": "42038:24:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$",
                          "typeString": "function (uint256,uint256) pure"
                        }
                      },
                      "id": 62899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [
                        "42081:8:86",
                        "42127:5:86"
                      ],
                      "names": [
                        "duration",
                        "limit"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "42038:133:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 62900,
                    "nodeType": "RevertStatement",
                    "src": "42031:140:86"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 62905,
                          "name": "extension",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62735,
                          "src": "42250:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                          }
                        },
                        "id": 62906,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "42260:8:86",
                        "memberName": "proposer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61118,
                        "src": "42250:18:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 62907,
                          "name": "extension",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62735,
                          "src": "42270:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                          }
                        },
                        "id": 62908,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "42280:10:86",
                        "memberName": "nonceSpace",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61120,
                        "src": "42270:20:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 62909,
                          "name": "extension",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62735,
                          "src": "42292:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                          }
                        },
                        "id": 62910,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "42302:5:86",
                        "memberName": "nonce",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61122,
                        "src": "42292:15:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 62902,
                        "name": "revokedNonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61030,
                        "src": "42225:12:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PWNRevokedNonce_$66596",
                          "typeString": "contract PWNRevokedNonce"
                        }
                      },
                      "id": 62904,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "42238:11:86",
                      "memberName": "revokeNonce",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 66467,
                      "src": "42225:24:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256) external"
                      }
                    },
                    "id": 62911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "42225:83:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62912,
                  "nodeType": "ExpressionStatement",
                  "src": "42225:83:86"
                },
                {
                  "assignments": [
                    62914
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 62914,
                      "mutability": "mutable",
                      "name": "originalDefaultTimestamp",
                      "nameLocation": "42349:24:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 63000,
                      "src": "42342:31:86",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      },
                      "typeName": {
                        "id": 62913,
                        "name": "uint40",
                        "nodeType": "ElementaryTypeName",
                        "src": "42342:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 62917,
                  "initialValue": {
                    "expression": {
                      "id": 62915,
                      "name": "loan",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 62744,
                      "src": "42376:4:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                      }
                    },
                    "id": 62916,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "42381:16:86",
                    "memberName": "defaultTimestamp",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 61086,
                    "src": "42376:21:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "42342:55:86"
                },
                {
                  "expression": {
                    "id": 62925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 62918,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62744,
                        "src": "42407:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 62920,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "42412:16:86",
                      "memberName": "defaultTimestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61086,
                      "src": "42407:21:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      },
                      "id": 62924,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 62921,
                        "name": "originalDefaultTimestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62914,
                        "src": "42431:24:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 62922,
                          "name": "extension",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62735,
                          "src": "42458:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                          }
                        },
                        "id": 62923,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "42468:8:86",
                        "memberName": "duration",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61114,
                        "src": "42458:18:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      "src": "42431:45:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "42407:69:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "id": 62926,
                  "nodeType": "ExpressionStatement",
                  "src": "42407:69:86"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 62928,
                          "name": "extension",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62735,
                          "src": "42549:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                          }
                        },
                        "id": 62929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "42559:6:86",
                        "memberName": "loanId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61108,
                        "src": "42549:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 62930,
                        "name": "originalDefaultTimestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62914,
                        "src": "42605:24:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      {
                        "expression": {
                          "id": 62931,
                          "name": "loan",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62744,
                          "src": "42669:4:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                            "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                          }
                        },
                        "id": 62932,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "42674:16:86",
                        "memberName": "defaultTimestamp",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61086,
                        "src": "42669:21:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "id": 62927,
                      "name": "LOANExtended",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61173,
                      "src": "42514:12:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint40_$_t_uint40_$returns$__$",
                        "typeString": "function (uint256,uint40,uint40)"
                      }
                    },
                    "id": 62933,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [
                      "42541:6:86",
                      "42579:24:86",
                      "42643:24:86"
                    ],
                    "names": [
                      "loanId",
                      "originalDefaultTimestamp",
                      "extendedDefaultTimestamp"
                    ],
                    "nodeType": "FunctionCall",
                    "src": "42514:187:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 62934,
                  "nodeType": "EmitStatement",
                  "src": "42509:192:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 62946,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 62941,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 62935,
                          "name": "extension",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62735,
                          "src": "42770:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                          }
                        },
                        "id": 62936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "42780:19:86",
                        "memberName": "compensationAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61110,
                        "src": "42770:29:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 62939,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "42811:1:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 62938,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "42803:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 62937,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "42803:7:86",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 62940,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "42803:10:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "42770:43:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 62945,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 62942,
                          "name": "extension",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 62735,
                          "src": "42817:9:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                            "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                          }
                        },
                        "id": 62943,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "42827:18:86",
                        "memberName": "compensationAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 61112,
                        "src": "42817:28:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 62944,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "42848:1:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "42817:32:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "42770:79:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 62999,
                  "nodeType": "IfStatement",
                  "src": "42766:672:86",
                  "trueBody": {
                    "id": 62998,
                    "nodeType": "Block",
                    "src": "42851:587:86",
                    "statements": [
                      {
                        "assignments": [
                          62951
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 62951,
                            "mutability": "mutable",
                            "name": "compensation",
                            "nameLocation": "42889:12:86",
                            "nodeType": "VariableDeclaration",
                            "scope": 62998,
                            "src": "42865:36:86",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                              "typeString": "struct MultiToken.Asset"
                            },
                            "typeName": {
                              "id": 62950,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 62949,
                                "name": "MultiToken.Asset",
                                "nameLocations": [
                                  "42865:10:86",
                                  "42876:5:86"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 60,
                                "src": "42865:16:86"
                              },
                              "referencedDeclaration": 60,
                              "src": "42865:16:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                                "typeString": "struct MultiToken.Asset"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 62958,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 62955,
                                "name": "extension",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62735,
                                "src": "42940:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                                }
                              },
                              "id": 62956,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "42950:18:86",
                              "memberName": "compensationAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61112,
                              "src": "42940:28:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "id": 62952,
                                "name": "extension",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62735,
                                "src": "42904:9:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                                  "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                                }
                              },
                              "id": 62953,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "42914:19:86",
                              "memberName": "compensationAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61110,
                              "src": "42904:29:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 62954,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "42934:5:86",
                            "memberName": "ERC20",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 85,
                            "src": "42904:35:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_struct$_Asset_$60_memory_ptr_$bound_to$_t_address_$",
                              "typeString": "function (address,uint256) pure returns (struct MultiToken.Asset memory)"
                            }
                          },
                          "id": 62957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "42904:65:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                            "typeString": "struct MultiToken.Asset memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "42865:104:86"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 62960,
                              "name": "compensation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62951,
                              "src": "43050:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            ],
                            "id": 62959,
                            "name": "_checkValidAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63222,
                            "src": "43033:16:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Asset_$60_memory_ptr_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory) view"
                            }
                          },
                          "id": 62961,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43033:30:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62962,
                        "nodeType": "ExpressionStatement",
                        "src": "43033:30:86"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 62966,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 62963,
                              "name": "permitData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62739,
                              "src": "43137:10:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            "id": 62964,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "43148:6:86",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "43137:17:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 62965,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "43157:1:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "43137:21:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 62990,
                        "nodeType": "IfStatement",
                        "src": "43133:232:86",
                        "trueBody": {
                          "id": 62989,
                          "nodeType": "Block",
                          "src": "43160:205:86",
                          "statements": [
                            {
                              "assignments": [
                                62969
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 62969,
                                  "mutability": "mutable",
                                  "name": "permit",
                                  "nameLocation": "43192:6:86",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 62989,
                                  "src": "43178:20:86",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                    "typeString": "struct Permit"
                                  },
                                  "typeName": {
                                    "id": 62968,
                                    "nodeType": "UserDefinedTypeName",
                                    "pathNode": {
                                      "id": 62967,
                                      "name": "Permit",
                                      "nameLocations": [
                                        "43178:6:86"
                                      ],
                                      "nodeType": "IdentifierPath",
                                      "referencedDeclaration": 66282,
                                      "src": "43178:6:86"
                                    },
                                    "referencedDeclaration": 66282,
                                    "src": "43178:6:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Permit_$66282_storage_ptr",
                                      "typeString": "struct Permit"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 62976,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 62972,
                                    "name": "permitData",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 62739,
                                    "src": "43212:10:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  },
                                  {
                                    "components": [
                                      {
                                        "id": 62973,
                                        "name": "Permit",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 66282,
                                        "src": "43225:6:86",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_struct$_Permit_$66282_storage_ptr_$",
                                          "typeString": "type(struct Permit storage pointer)"
                                        }
                                      }
                                    ],
                                    "id": 62974,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "43224:8:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_struct$_Permit_$66282_storage_ptr_$",
                                      "typeString": "type(struct Permit storage pointer)"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_type$_t_struct$_Permit_$66282_storage_ptr_$",
                                      "typeString": "type(struct Permit storage pointer)"
                                    }
                                  ],
                                  "expression": {
                                    "id": 62970,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "43201:3:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 62971,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "43205:6:86",
                                  "memberName": "decode",
                                  "nodeType": "MemberAccess",
                                  "src": "43201:10:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 62975,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "43201:32:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                  "typeString": "struct Permit memory"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "43178:55:86"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 62978,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "43264:3:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 62979,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "43268:6:86",
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "43264:10:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 62980,
                                      "name": "extension",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 62735,
                                      "src": "43276:9:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                                        "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                                      }
                                    },
                                    "id": 62981,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "43286:19:86",
                                    "memberName": "compensationAddress",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 61110,
                                    "src": "43276:29:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 62982,
                                    "name": "permit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 62969,
                                    "src": "43307:6:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                      "typeString": "struct Permit memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                      "typeString": "struct Permit memory"
                                    }
                                  ],
                                  "id": 62977,
                                  "name": "_checkPermit",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 61611,
                                  "src": "43251:12:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_struct$_Permit_$66282_memory_ptr_$returns$__$",
                                    "typeString": "function (address,address,struct Permit memory) pure"
                                  }
                                },
                                "id": 62983,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "43251:63:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 62984,
                              "nodeType": "ExpressionStatement",
                              "src": "43251:63:86"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 62986,
                                    "name": "permit",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 62969,
                                    "src": "43343:6:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                      "typeString": "struct Permit memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Permit_$66282_memory_ptr",
                                      "typeString": "struct Permit memory"
                                    }
                                  ],
                                  "id": 62985,
                                  "name": "_tryPermit",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 66148,
                                  "src": "43332:10:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Permit_$66282_memory_ptr_$returns$__$",
                                    "typeString": "function (struct Permit memory)"
                                  }
                                },
                                "id": 62987,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "43332:18:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 62988,
                              "nodeType": "ExpressionStatement",
                              "src": "43332:18:86"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 62992,
                              "name": "compensation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62951,
                              "src": "43388:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 62993,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 62744,
                                "src": "43402:4:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                  "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                }
                              },
                              "id": 62994,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "43407:8:86",
                              "memberName": "borrower",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61088,
                              "src": "43402:13:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 62995,
                              "name": "loanOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 62830,
                              "src": "43417:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                "typeString": "struct MultiToken.Asset memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 62991,
                            "name": "_pushFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 65946,
                            "src": "43378:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Asset_$60_memory_ptr_$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (struct MultiToken.Asset memory,address,address)"
                            }
                          },
                          "id": 62996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43378:49:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 62997,
                        "nodeType": "ExpressionStatement",
                        "src": "43378:49:86"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 62732,
              "nodeType": "StructuredDocumentation",
              "src": "39120:386:86",
              "text": " @notice Extend loans default date with signed extension proposal signed by borrower or LOAN token owner.\n @dev The function assumes a prior token approval to a contract address or a signed permit.\n @param extension Extension proposal struct.\n @param signature Signature of the extension proposal.\n @param permitData Callers credit permit data."
            },
            "functionSelector": "028232ea",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "extendLOAN",
            "nameLocation": "39520:10:86",
            "parameters": {
              "id": 62740,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62735,
                  "mutability": "mutable",
                  "name": "extension",
                  "nameLocation": "39567:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63001,
                  "src": "39540:36:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                    "typeString": "struct PWNSimpleLoan.ExtensionProposal"
                  },
                  "typeName": {
                    "id": 62734,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 62733,
                      "name": "ExtensionProposal",
                      "nameLocations": [
                        "39540:17:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61123,
                      "src": "39540:17:86"
                    },
                    "referencedDeclaration": 61123,
                    "src": "39540:17:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExtensionProposal_$61123_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.ExtensionProposal"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 62737,
                  "mutability": "mutable",
                  "name": "signature",
                  "nameLocation": "39601:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63001,
                  "src": "39586:24:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 62736,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "39586:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 62739,
                  "mutability": "mutable",
                  "name": "permitData",
                  "nameLocation": "39635:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63001,
                  "src": "39620:25:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 62738,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "39620:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "39530:121:86"
            },
            "returnParameters": {
              "id": 62741,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "39661:0:86"
            },
            "scope": 63281,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 63029,
            "nodeType": "FunctionDefinition",
            "src": "43615:347:86",
            "nodes": [],
            "body": {
              "id": 63028,
              "nodeType": "Block",
              "src": "43709:253:86",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "1901",
                            "id": 63013,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "hexString",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "43766:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                              "typeString": "literal_string hex\"1901\""
                            },
                            "value": "\u0019\u0001"
                          },
                          {
                            "id": 63014,
                            "name": "DOMAIN_SEPARATOR",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61018,
                            "src": "43789:16:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 63018,
                                    "name": "EXTENSION_PROPOSAL_TYPEHASH",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 60993,
                                    "src": "43863:27:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "id": 63021,
                                        "name": "extension",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 63005,
                                        "src": "43919:9:86",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                                          "typeString": "struct PWNSimpleLoan.ExtensionProposal calldata"
                                        }
                                      ],
                                      "expression": {
                                        "id": 63019,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -1,
                                        "src": "43908:3:86",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 63020,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "43912:6:86",
                                      "memberName": "encode",
                                      "nodeType": "MemberAccess",
                                      "src": "43908:10:86",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 63022,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "43908:21:86",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 63016,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "43829:3:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 63017,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "43833:12:86",
                                  "memberName": "encodePacked",
                                  "nodeType": "MemberAccess",
                                  "src": "43829:16:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 63023,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "43829:114:86",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 63015,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "43819:9:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 63024,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "43819:125:86",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541",
                              "typeString": "literal_string hex\"1901\""
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 63011,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "43736:3:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 63012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "43740:12:86",
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "43736:16:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 63025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "43736:218:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 63010,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "43726:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 63026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "43726:229:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 63009,
                  "id": 63027,
                  "nodeType": "Return",
                  "src": "43719:236:86"
                }
              ]
            },
            "documentation": {
              "id": 63002,
              "nodeType": "StructuredDocumentation",
              "src": "43450:160:86",
              "text": " @notice Get the hash of the extension struct.\n @param extension Extension proposal struct.\n @return Hash of the extension struct."
            },
            "functionSelector": "74baf6ef",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getExtensionHash",
            "nameLocation": "43624:16:86",
            "parameters": {
              "id": 63006,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63005,
                  "mutability": "mutable",
                  "name": "extension",
                  "nameLocation": "43668:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63029,
                  "src": "43641:36:86",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ExtensionProposal_$61123_calldata_ptr",
                    "typeString": "struct PWNSimpleLoan.ExtensionProposal"
                  },
                  "typeName": {
                    "id": 63004,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 63003,
                      "name": "ExtensionProposal",
                      "nameLocations": [
                        "43641:17:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 61123,
                      "src": "43641:17:86"
                    },
                    "referencedDeclaration": 61123,
                    "src": "43641:17:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExtensionProposal_$61123_storage_ptr",
                      "typeString": "struct PWNSimpleLoan.ExtensionProposal"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "43640:38:86"
            },
            "returnParameters": {
              "id": 63009,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63008,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 63029,
                  "src": "43700:7:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 63007,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "43700:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "43699:9:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 63146,
            "nodeType": "FunctionDefinition",
            "src": "45336:1157:86",
            "nodes": [],
            "body": {
              "id": 63145,
              "nodeType": "Block",
              "src": "45804:689:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    63063
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 63063,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "45827:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 63145,
                      "src": "45814:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 63062,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 63061,
                          "name": "LOAN",
                          "nameLocations": [
                            "45814:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "45814:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "45814:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 63067,
                  "initialValue": {
                    "baseExpression": {
                      "id": 63064,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "45834:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 63066,
                    "indexExpression": {
                      "id": 63065,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63032,
                      "src": "45840:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "45834:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "45814:33:86"
                },
                {
                  "expression": {
                    "id": 63072,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63068,
                      "name": "status",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63035,
                      "src": "45858:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 63070,
                          "name": "loanId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 63032,
                          "src": "45882:6:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 63069,
                        "name": "_getLOANStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63178,
                        "src": "45867:14:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint8_$",
                          "typeString": "function (uint256) view returns (uint8)"
                        }
                      },
                      "id": 63071,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "45867:22:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "45858:31:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 63073,
                  "nodeType": "ExpressionStatement",
                  "src": "45858:31:86"
                },
                {
                  "expression": {
                    "id": 63077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63074,
                      "name": "startTimestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63037,
                      "src": "45899:14:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 63075,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63063,
                        "src": "45916:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 63076,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "45921:14:86",
                      "memberName": "startTimestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61084,
                      "src": "45916:19:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "45899:36:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "id": 63078,
                  "nodeType": "ExpressionStatement",
                  "src": "45899:36:86"
                },
                {
                  "expression": {
                    "id": 63082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63079,
                      "name": "defaultTimestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63039,
                      "src": "45945:16:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 63080,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63063,
                        "src": "45964:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 63081,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "45969:16:86",
                      "memberName": "defaultTimestamp",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61086,
                      "src": "45964:21:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "45945:40:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "id": 63083,
                  "nodeType": "ExpressionStatement",
                  "src": "45945:40:86"
                },
                {
                  "expression": {
                    "id": 63087,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63084,
                      "name": "borrower",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63041,
                      "src": "45995:8:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 63085,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63063,
                        "src": "46006:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 63086,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "46011:8:86",
                      "memberName": "borrower",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61088,
                      "src": "46006:13:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "45995:24:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 63088,
                  "nodeType": "ExpressionStatement",
                  "src": "45995:24:86"
                },
                {
                  "expression": {
                    "id": 63092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63089,
                      "name": "originalLender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63043,
                      "src": "46029:14:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 63090,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63063,
                        "src": "46046:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 63091,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "46051:14:86",
                      "memberName": "originalLender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61090,
                      "src": "46046:19:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "46029:36:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 63093,
                  "nodeType": "ExpressionStatement",
                  "src": "46029:36:86"
                },
                {
                  "expression": {
                    "id": 63108,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63094,
                      "name": "loanOwner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63045,
                      "src": "46075:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 63098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 63095,
                            "name": "loan",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63063,
                            "src": "46087:4:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                              "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                            }
                          },
                          "id": 63096,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "46092:6:86",
                          "memberName": "status",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61078,
                          "src": "46087:11:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 63097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "46102:1:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "46087:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 63105,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "46142:1:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 63104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "46134:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 63103,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "46134:7:86",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 63106,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "46134:10:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 63107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "46087:57:86",
                      "trueExpression": {
                        "arguments": [
                          {
                            "id": 63101,
                            "name": "loanId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63032,
                            "src": "46124:6:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 63099,
                            "name": "loanToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61024,
                            "src": "46106:9:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PWNLOAN_$65743",
                              "typeString": "contract PWNLOAN"
                            }
                          },
                          "id": 63100,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "46116:7:86",
                          "memberName": "ownerOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 51449,
                          "src": "46106:17:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                            "typeString": "function (uint256) view external returns (address)"
                          }
                        },
                        "id": 63102,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "46106:25:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "46075:69:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 63109,
                  "nodeType": "ExpressionStatement",
                  "src": "46075:69:86"
                },
                {
                  "expression": {
                    "id": 63113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63110,
                      "name": "accruingInterestDailyRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63047,
                      "src": "46154:25:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 63111,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63063,
                        "src": "46182:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 63112,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "46187:25:86",
                      "memberName": "accruingInterestDailyRate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61092,
                      "src": "46182:30:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "46154:58:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "id": 63114,
                  "nodeType": "ExpressionStatement",
                  "src": "46154:58:86"
                },
                {
                  "expression": {
                    "id": 63118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63115,
                      "name": "fixedInterestAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63049,
                      "src": "46222:19:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 63116,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63063,
                        "src": "46244:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 63117,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "46249:19:86",
                      "memberName": "fixedInterestAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61094,
                      "src": "46244:24:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "46222:46:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 63119,
                  "nodeType": "ExpressionStatement",
                  "src": "46222:46:86"
                },
                {
                  "expression": {
                    "id": 63127,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63120,
                      "name": "credit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63052,
                      "src": "46278:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                        "typeString": "struct MultiToken.Asset memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 63124,
                            "name": "loan",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63063,
                            "src": "46312:4:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                              "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                            }
                          },
                          "id": 63125,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "46317:15:86",
                          "memberName": "principalAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61096,
                          "src": "46312:20:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "expression": {
                            "id": 63121,
                            "name": "loan",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 63063,
                            "src": "46287:4:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                              "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                            }
                          },
                          "id": 63122,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "46292:13:86",
                          "memberName": "creditAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 61080,
                          "src": "46287:18:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 63123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "46306:5:86",
                        "memberName": "ERC20",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 85,
                        "src": "46287:24:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$_t_struct$_Asset_$60_memory_ptr_$bound_to$_t_address_$",
                          "typeString": "function (address,uint256) pure returns (struct MultiToken.Asset memory)"
                        }
                      },
                      "id": 63126,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "46287:46:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                        "typeString": "struct MultiToken.Asset memory"
                      }
                    },
                    "src": "46278:55:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                      "typeString": "struct MultiToken.Asset memory"
                    }
                  },
                  "id": 63128,
                  "nodeType": "ExpressionStatement",
                  "src": "46278:55:86"
                },
                {
                  "expression": {
                    "id": 63132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63129,
                      "name": "collateral",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63055,
                      "src": "46343:10:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                        "typeString": "struct MultiToken.Asset memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 63130,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63063,
                        "src": "46356:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 63131,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "46361:10:86",
                      "memberName": "collateral",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61099,
                      "src": "46356:15:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Asset_$60_storage",
                        "typeString": "struct MultiToken.Asset storage ref"
                      }
                    },
                    "src": "46343:28:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                      "typeString": "struct MultiToken.Asset memory"
                    }
                  },
                  "id": 63133,
                  "nodeType": "ExpressionStatement",
                  "src": "46343:28:86"
                },
                {
                  "expression": {
                    "id": 63137,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63134,
                      "name": "originalSourceOfFunds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63057,
                      "src": "46381:21:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 63135,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63063,
                        "src": "46405:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 63136,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "46410:21:86",
                      "memberName": "originalSourceOfFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61082,
                      "src": "46405:26:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "46381:50:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 63138,
                  "nodeType": "ExpressionStatement",
                  "src": "46381:50:86"
                },
                {
                  "expression": {
                    "id": 63143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 63139,
                      "name": "repaymentAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63059,
                      "src": "46441:15:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 63141,
                          "name": "loanId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 63032,
                          "src": "46479:6:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 63140,
                        "name": "loanRepaymentAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62381,
                        "src": "46459:19:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) view returns (uint256)"
                        }
                      },
                      "id": 63142,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "46459:27:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "46441:45:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 63144,
                  "nodeType": "ExpressionStatement",
                  "src": "46441:45:86"
                }
              ]
            },
            "documentation": {
              "id": 63030,
              "nodeType": "StructuredDocumentation",
              "src": "44171:1160:86",
              "text": " @notice Return a LOAN data struct associated with a loan id.\n @param loanId Id of a loan in question.\n @return status LOAN status.\n @return startTimestamp Unix timestamp (in seconds) of a loan creation date.\n @return defaultTimestamp Unix timestamp (in seconds) of a loan default date.\n @return borrower Address of a loan borrower.\n @return originalLender Address of a loan original lender.\n @return loanOwner Address of a LOAN token holder.\n @return accruingInterestDailyRate Daily interest rate in basis points.\n @return fixedInterestAmount Fixed interest amount in credit asset tokens.\n @return credit Asset used as a loan credit. For a definition see { MultiToken dependency lib }.\n @return collateral Asset used as a loan collateral. For a definition see { MultiToken dependency lib }.\n @return originalSourceOfFunds Address of a source of funds for the loan. Original lender address, if the loan was funded directly, or a pool address from witch credit funds were withdrawn / borrowred.\n @return repaymentAmount Loan repayment amount in credit asset tokens."
            },
            "functionSelector": "3e6df512",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLOAN",
            "nameLocation": "45345:7:86",
            "parameters": {
              "id": 63033,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63032,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "45361:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45353:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 63031,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45353:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "45352:16:86"
            },
            "returnParameters": {
              "id": 63060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63035,
                  "mutability": "mutable",
                  "name": "status",
                  "nameLocation": "45407:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45401:12:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 63034,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "45401:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 63037,
                  "mutability": "mutable",
                  "name": "startTimestamp",
                  "nameLocation": "45430:14:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45423:21:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 63036,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "45423:6:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 63039,
                  "mutability": "mutable",
                  "name": "defaultTimestamp",
                  "nameLocation": "45461:16:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45454:23:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 63038,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "45454:6:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 63041,
                  "mutability": "mutable",
                  "name": "borrower",
                  "nameLocation": "45495:8:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45487:16:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 63040,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "45487:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 63043,
                  "mutability": "mutable",
                  "name": "originalLender",
                  "nameLocation": "45521:14:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45513:22:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 63042,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "45513:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 63045,
                  "mutability": "mutable",
                  "name": "loanOwner",
                  "nameLocation": "45553:9:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45545:17:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 63044,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "45545:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 63047,
                  "mutability": "mutable",
                  "name": "accruingInterestDailyRate",
                  "nameLocation": "45579:25:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45572:32:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 63046,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "45572:6:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 63049,
                  "mutability": "mutable",
                  "name": "fixedInterestAmount",
                  "nameLocation": "45622:19:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45614:27:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 63048,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45614:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 63052,
                  "mutability": "mutable",
                  "name": "credit",
                  "nameLocation": "45675:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45651:30:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                    "typeString": "struct MultiToken.Asset"
                  },
                  "typeName": {
                    "id": 63051,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 63050,
                      "name": "MultiToken.Asset",
                      "nameLocations": [
                        "45651:10:86",
                        "45662:5:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 60,
                      "src": "45651:16:86"
                    },
                    "referencedDeclaration": 60,
                    "src": "45651:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                      "typeString": "struct MultiToken.Asset"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 63055,
                  "mutability": "mutable",
                  "name": "collateral",
                  "nameLocation": "45715:10:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45691:34:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                    "typeString": "struct MultiToken.Asset"
                  },
                  "typeName": {
                    "id": 63054,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 63053,
                      "name": "MultiToken.Asset",
                      "nameLocations": [
                        "45691:10:86",
                        "45702:5:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 60,
                      "src": "45691:16:86"
                    },
                    "referencedDeclaration": 60,
                    "src": "45691:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                      "typeString": "struct MultiToken.Asset"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 63057,
                  "mutability": "mutable",
                  "name": "originalSourceOfFunds",
                  "nameLocation": "45743:21:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45735:29:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 63056,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "45735:7:86",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 63059,
                  "mutability": "mutable",
                  "name": "repaymentAmount",
                  "nameLocation": "45782:15:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63146,
                  "src": "45774:23:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 63058,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "45774:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "45391:412:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 63178,
            "nodeType": "FunctionDefinition",
            "src": "46660:216:86",
            "nodes": [],
            "body": {
              "id": 63177,
              "nodeType": "Block",
              "src": "46729:147:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    63156
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 63156,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "46752:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 63177,
                      "src": "46739:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 63155,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 63154,
                          "name": "LOAN",
                          "nameLocations": [
                            "46739:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "46739:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "46739:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 63160,
                  "initialValue": {
                    "baseExpression": {
                      "id": 63157,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "46759:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 63159,
                    "indexExpression": {
                      "id": 63158,
                      "name": "loanId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63149,
                      "src": "46765:6:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "46759:13:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "46739:33:86"
                },
                {
                  "expression": {
                    "condition": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 63170,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 63164,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 63161,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 63156,
                                "src": "46790:4:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                  "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                }
                              },
                              "id": 63162,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "46795:6:86",
                              "memberName": "status",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61078,
                              "src": "46790:11:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 63163,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "46805:1:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "46790:16:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 63169,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 63165,
                                "name": "loan",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 63156,
                                "src": "46810:4:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                  "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                                }
                              },
                              "id": 63166,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "46815:16:86",
                              "memberName": "defaultTimestamp",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 61086,
                              "src": "46810:21:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "expression": {
                                "id": 63167,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "46835:5:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 63168,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "46841:9:86",
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "46835:15:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "46810:40:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "46790:60:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 63171,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "46789:62:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "expression": {
                        "id": 63173,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63156,
                        "src": "46858:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 63174,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "46863:6:86",
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61078,
                      "src": "46858:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 63175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "46789:80:86",
                    "trueExpression": {
                      "hexValue": "34",
                      "id": 63172,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "46854:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_4_by_1",
                        "typeString": "int_const 4"
                      },
                      "value": "4"
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 63153,
                  "id": 63176,
                  "nodeType": "Return",
                  "src": "46782:87:86"
                }
              ]
            },
            "documentation": {
              "id": 63147,
              "nodeType": "StructuredDocumentation",
              "src": "46499:156:86",
              "text": " @notice Return a LOAN status associated with a loan id.\n @param loanId Id of a loan in question.\n @return status LOAN status."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getLOANStatus",
            "nameLocation": "46669:14:86",
            "parameters": {
              "id": 63150,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63149,
                  "mutability": "mutable",
                  "name": "loanId",
                  "nameLocation": "46692:6:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63178,
                  "src": "46684:14:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 63148,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "46684:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "46683:16:86"
            },
            "returnParameters": {
              "id": 63153,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63152,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 63178,
                  "src": "46722:5:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 63151,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "46722:5:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "46721:7:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 63194,
            "nodeType": "FunctionDefinition",
            "src": "47343:147:86",
            "nodes": [],
            "body": {
              "id": 63193,
              "nodeType": "Block",
              "src": "47423:67:86",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 63189,
                        "name": "asset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63182,
                        "src": "47459:5:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        }
                      },
                      {
                        "id": 63190,
                        "name": "categoryRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61033,
                        "src": "47466:16:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMultiTokenCategoryRegistry_$96523",
                          "typeString": "contract IMultiTokenCategoryRegistry"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                          "typeString": "struct MultiToken.Asset memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_IMultiTokenCategoryRegistry_$96523",
                          "typeString": "contract IMultiTokenCategoryRegistry"
                        }
                      ],
                      "expression": {
                        "id": 63187,
                        "name": "MultiToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1132,
                        "src": "47440:10:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MultiToken_$1132_$",
                          "typeString": "type(library MultiToken)"
                        }
                      },
                      "id": 63188,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "47451:7:86",
                      "memberName": "isValid",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 864,
                      "src": "47440:18:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Asset_$60_memory_ptr_$_t_contract$_IMultiTokenCategoryRegistry_$96523_$returns$_t_bool_$",
                        "typeString": "function (struct MultiToken.Asset memory,contract IMultiTokenCategoryRegistry) view returns (bool)"
                      }
                    },
                    "id": 63191,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "47440:43:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 63186,
                  "id": 63192,
                  "nodeType": "Return",
                  "src": "47433:50:86"
                }
              ]
            },
            "documentation": {
              "id": 63179,
              "nodeType": "StructuredDocumentation",
              "src": "47085:253:86",
              "text": " @notice Check if the asset is valid with the MultiToken dependency lib and the category registry.\n @dev See MultiToken.isValid for more details.\n @param asset Asset to be checked.\n @return True if the asset is valid."
            },
            "functionSelector": "7122192c",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isValidAsset",
            "nameLocation": "47352:12:86",
            "parameters": {
              "id": 63183,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63182,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "47389:5:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63194,
                  "src": "47365:29:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                    "typeString": "struct MultiToken.Asset"
                  },
                  "typeName": {
                    "id": 63181,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 63180,
                      "name": "MultiToken.Asset",
                      "nameLocations": [
                        "47365:10:86",
                        "47376:5:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 60,
                      "src": "47365:16:86"
                    },
                    "referencedDeclaration": 60,
                    "src": "47365:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                      "typeString": "struct MultiToken.Asset"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "47364:31:86"
            },
            "returnParameters": {
              "id": 63186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63185,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 63194,
                  "src": "47417:4:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 63184,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "47417:4:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "47416:6:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 63222,
            "nodeType": "FunctionDefinition",
            "src": "47711:341:86",
            "nodes": [],
            "body": {
              "id": 63221,
              "nodeType": "Block",
              "src": "47781:271:86",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "id": 63204,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "47795:20:86",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 63202,
                          "name": "asset",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 63198,
                          "src": "47809:5:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                            "typeString": "struct MultiToken.Asset memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                            "typeString": "struct MultiToken.Asset memory"
                          }
                        ],
                        "id": 63201,
                        "name": "isValidAsset",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63194,
                        "src": "47796:12:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Asset_$60_memory_ptr_$returns$_t_bool_$",
                          "typeString": "function (struct MultiToken.Asset memory) view returns (bool)"
                        }
                      },
                      "id": 63203,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "47796:19:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 63220,
                  "nodeType": "IfStatement",
                  "src": "47791:255:86",
                  "trueBody": {
                    "id": 63219,
                    "nodeType": "Block",
                    "src": "47817:229:86",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 63208,
                                    "name": "asset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 63198,
                                    "src": "47895:5:86",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                      "typeString": "struct MultiToken.Asset memory"
                                    }
                                  },
                                  "id": 63209,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "47901:8:86",
                                  "memberName": "category",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 53,
                                  "src": "47895:14:86",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Category_$50",
                                    "typeString": "enum MultiToken.Category"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_Category_$50",
                                    "typeString": "enum MultiToken.Category"
                                  }
                                ],
                                "id": 63207,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "47889:5:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint8_$",
                                  "typeString": "type(uint8)"
                                },
                                "typeName": {
                                  "id": 63206,
                                  "name": "uint8",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "47889:5:86",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 63210,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "47889:21:86",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "expression": {
                                "id": 63211,
                                "name": "asset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 63198,
                                "src": "47934:5:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                  "typeString": "struct MultiToken.Asset memory"
                                }
                              },
                              "id": 63212,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "47940:12:86",
                              "memberName": "assetAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 55,
                              "src": "47934:18:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 63213,
                                "name": "asset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 63198,
                                "src": "47974:5:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                  "typeString": "struct MultiToken.Asset memory"
                                }
                              },
                              "id": 63214,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "47980:2:86",
                              "memberName": "id",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 57,
                              "src": "47974:8:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 63215,
                                "name": "asset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 63198,
                                "src": "48008:5:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                                  "typeString": "struct MultiToken.Asset memory"
                                }
                              },
                              "id": 63216,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "48014:6:86",
                              "memberName": "amount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 59,
                              "src": "48008:12:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 63205,
                            "name": "InvalidMultiTokenAsset",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 61273,
                            "src": "47838:22:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint8,address,uint256,uint256) pure"
                            }
                          },
                          "id": 63217,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "47879:8:86",
                            "47928:4:86",
                            "47970:2:86",
                            "48000:6:86"
                          ],
                          "names": [
                            "category",
                            "addr",
                            "id",
                            "amount"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "47838:197:86",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 63218,
                        "nodeType": "RevertStatement",
                        "src": "47831:204:86"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 63195,
              "nodeType": "StructuredDocumentation",
              "src": "47496:210:86",
              "text": " @notice Check if the asset is valid with the MultiToken lib and the category registry.\n @dev The function will revert if the asset is not valid.\n @param asset Asset to be checked."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkValidAsset",
            "nameLocation": "47720:16:86",
            "parameters": {
              "id": 63199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63198,
                  "mutability": "mutable",
                  "name": "asset",
                  "nameLocation": "47761:5:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63222,
                  "src": "47737:29:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Asset_$60_memory_ptr",
                    "typeString": "struct MultiToken.Asset"
                  },
                  "typeName": {
                    "id": 63197,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 63196,
                      "name": "MultiToken.Asset",
                      "nameLocations": [
                        "47737:10:86",
                        "47748:5:86"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 60,
                      "src": "47737:16:86"
                    },
                    "referencedDeclaration": 60,
                    "src": "47737:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Asset_$60_storage_ptr",
                      "typeString": "struct MultiToken.Asset"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "47736:31:86"
            },
            "returnParameters": {
              "id": 63200,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "47781:0:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "id": 63238,
            "nodeType": "FunctionDefinition",
            "src": "48321:135:86",
            "nodes": [],
            "body": {
              "id": 63237,
              "nodeType": "Block",
              "src": "48395:61:86",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 63233,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "48443:4:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_PWNSimpleLoan_$63281",
                              "typeString": "contract PWNSimpleLoan"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_PWNSimpleLoan_$63281",
                              "typeString": "contract PWNSimpleLoan"
                            }
                          ],
                          "id": 63232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "48435:7:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 63231,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "48435:7:86",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 63234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "48435:13:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 63229,
                        "name": "config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 61027,
                        "src": "48412:6:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_PWNConfig_$60390",
                          "typeString": "contract PWNConfig"
                        }
                      },
                      "id": 63230,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "48419:15:86",
                      "memberName": "loanMetadataUri",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 60303,
                      "src": "48412:22:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (address) view external returns (string memory)"
                      }
                    },
                    "id": 63235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "48412:37:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 63228,
                  "id": 63236,
                  "nodeType": "Return",
                  "src": "48405:44:86"
                }
              ]
            },
            "baseFunctions": [
              60667
            ],
            "documentation": {
              "id": 63223,
              "nodeType": "StructuredDocumentation",
              "src": "48261:55:86",
              "text": " @inheritdoc IPWNLoanMetadataProvider"
            },
            "functionSelector": "111d8a15",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "loanMetadataUri",
            "nameLocation": "48330:15:86",
            "overrides": {
              "id": 63225,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "48348:8:86"
            },
            "parameters": {
              "id": 63224,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "48345:2:86"
            },
            "returnParameters": {
              "id": 63228,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63227,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 63238,
                  "src": "48380:13:86",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 63226,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "48380:6:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "48379:15:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 63280,
            "nodeType": "FunctionDefinition",
            "src": "48709:899:86",
            "nodes": [],
            "body": {
              "id": 63279,
              "nodeType": "Block",
              "src": "48804:804:86",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    63249
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 63249,
                      "mutability": "mutable",
                      "name": "loan",
                      "nameLocation": "48827:4:86",
                      "nodeType": "VariableDeclaration",
                      "scope": 63279,
                      "src": "48814:17:86",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                        "typeString": "struct PWNSimpleLoan.LOAN"
                      },
                      "typeName": {
                        "id": 63248,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 63247,
                          "name": "LOAN",
                          "nameLocations": [
                            "48814:4:86"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 61100,
                          "src": "48814:4:86"
                        },
                        "referencedDeclaration": 61100,
                        "src": "48814:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 63253,
                  "initialValue": {
                    "baseExpression": {
                      "id": 63250,
                      "name": "LOANs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 61106,
                      "src": "48834:5:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_LOAN_$61100_storage_$",
                        "typeString": "mapping(uint256 => struct PWNSimpleLoan.LOAN storage ref)"
                      }
                    },
                    "id": 63252,
                    "indexExpression": {
                      "id": 63251,
                      "name": "tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 63241,
                      "src": "48840:7:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "48834:14:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_LOAN_$61100_storage",
                      "typeString": "struct PWNSimpleLoan.LOAN storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "48814:34:86"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 63257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 63254,
                        "name": "loan",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 63249,
                        "src": "48863:4:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                          "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                        }
                      },
                      "id": 63255,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "48868:6:86",
                      "memberName": "status",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 61078,
                      "src": "48863:11:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 63256,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "48878:1:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "48863:16:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 63263,
                  "nodeType": "IfStatement",
                  "src": "48859:51:86",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 63260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "48908:1:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 63259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "48900:7:86",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes32_$",
                          "typeString": "type(bytes32)"
                        },
                        "typeName": {
                          "id": 63258,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "48900:7:86",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 63261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "48900:10:86",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "functionReturnParameters": 63246,
                    "id": 63262,
                    "nodeType": "Return",
                    "src": "48893:17:86"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 63268,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 63241,
                                "src": "49465:7:86",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 63267,
                              "name": "_getLOANStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 63178,
                              "src": "49450:14:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint8_$",
                                "typeString": "function (uint256) view returns (uint8)"
                              }
                            },
                            "id": 63269,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "49450:23:86",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          {
                            "expression": {
                              "id": 63270,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 63249,
                              "src": "49487:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                              }
                            },
                            "id": 63271,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "49492:16:86",
                            "memberName": "defaultTimestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61086,
                            "src": "49487:21:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          },
                          {
                            "expression": {
                              "id": 63272,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 63249,
                              "src": "49522:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                              }
                            },
                            "id": 63273,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "49527:19:86",
                            "memberName": "fixedInterestAmount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61094,
                            "src": "49522:24:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "expression": {
                              "id": 63274,
                              "name": "loan",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 63249,
                              "src": "49560:4:86",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_LOAN_$61100_storage_ptr",
                                "typeString": "struct PWNSimpleLoan.LOAN storage pointer"
                              }
                            },
                            "id": 63275,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "49565:25:86",
                            "memberName": "accruingInterestDailyRate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 61092,
                            "src": "49560:30:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          ],
                          "expression": {
                            "id": 63265,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "49426:3:86",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 63266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "49430:6:86",
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "49426:10:86",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 63276,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "49426:174:86",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 63264,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "49416:9:86",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 63277,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "49416:185:86",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 63246,
                  "id": 63278,
                  "nodeType": "Return",
                  "src": "49409:192:86"
                }
              ]
            },
            "baseFunctions": [
              60615
            ],
            "documentation": {
              "id": 63239,
              "nodeType": "StructuredDocumentation",
              "src": "48665:39:86",
              "text": " @inheritdoc IERC5646"
            },
            "functionSelector": "f5112315",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getStateFingerprint",
            "nameLocation": "48718:19:86",
            "overrides": {
              "id": 63243,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "48777:8:86"
            },
            "parameters": {
              "id": 63242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63241,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nameLocation": "48746:7:86",
                  "nodeType": "VariableDeclaration",
                  "scope": 63280,
                  "src": "48738:15:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 63240,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "48738:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "48737:17:86"
            },
            "returnParameters": {
              "id": 63246,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 63245,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 63280,
                  "src": "48795:7:86",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 63244,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "48795:7:86",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "48794:9:86"
            },
            "scope": 63281,
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 60953,
              "name": "PWNVault",
              "nameLocations": [
                "1400:8:86"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 66265,
              "src": "1400:8:86"
            },
            "id": 60954,
            "nodeType": "InheritanceSpecifier",
            "src": "1400:8:86"
          },
          {
            "baseName": {
              "id": 60955,
              "name": "IERC5646",
              "nameLocations": [
                "1410:8:86"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 60616,
              "src": "1410:8:86"
            },
            "id": 60956,
            "nodeType": "InheritanceSpecifier",
            "src": "1410:8:86"
          },
          {
            "baseName": {
              "id": 60957,
              "name": "IPWNLoanMetadataProvider",
              "nameLocations": [
                "1420:24:86"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 60668,
              "src": "1420:24:86"
            },
            "id": 60958,
            "nodeType": "InheritanceSpecifier",
            "src": "1420:24:86"
          }
        ],
        "canonicalName": "PWNSimpleLoan",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 60952,
          "nodeType": "StructuredDocumentation",
          "src": "1215:158:86",
          "text": " @title PWN Simple Loan\n @notice Contract managing a simple loan in PWN protocol.\n @dev Acts as a vault for every loan created by this contract."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          63281,
          60668,
          60616,
          66265,
          50186,
          54214,
          52364
        ],
        "name": "PWNSimpleLoan",
        "nameLocation": "1383:13:86",
        "scope": 63282,
        "usedErrors": [
          65,
          59971,
          59984,
          60778,
          60785,
          61186,
          61189,
          61192,
          61197,
          61200,
          61203,
          61210,
          61213,
          61216,
          61223,
          61230,
          61237,
          61240,
          61245,
          61248,
          61255,
          61262,
          61273,
          65820,
          65823,
          66289,
          66296,
          66360
        ]
      }
    ],
    "license": "GPL-3.0-only"
  },
  "id": 86
}